	.file	"coldlake.c"
	.cpu 430
	.mpy none

 ;  GNU C (mspgcc_20120406) version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (msp430)
 ; 	compiled by GNU C version 12.2.0, GMP version 6.2.1, MPFR version 4.1.0-p13, MPC version 1.2.1
 ;  GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
 ;  options passed:  coldlake.c -O0 -fverbose-asm
 ;  options enabled:  -fauto-inc-dec -fbranch-count-reg -fcommon
 ;  -fdelete-null-pointer-checks -fearly-inlining
 ;  -feliminate-unused-debug-types -ffunction-cse -fgcse-lm -fident
 ;  -finline-functions-called-once -fira-share-save-slots
 ;  -fira-share-spill-slots -fivopts -fkeep-static-consts
 ;  -fleading-underscore -fmath-errno -fmerge-debug-strings
 ;  -fmove-loop-invariants -fpeephole -fprefetch-loop-arrays
 ;  -freg-struct-return -fsched-critical-path-heuristic
 ;  -fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock
 ;  -fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec
 ;  -fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fshow-column
 ;  -fsigned-zeros -fsplit-ivs-in-unroller -fstrict-volatile-bitfields
 ;  -ftrapping-math -ftree-forwprop -ftree-loop-if-convert -ftree-loop-im
 ;  -ftree-loop-ivcanon -ftree-loop-optimize -ftree-parallelize-loops=
 ;  -ftree-phiprop -ftree-pta -ftree-reassoc -ftree-scev-cprop
 ;  -ftree-slp-vectorize -ftree-vect-loop-version -funit-at-a-time
 ;  -fverbose-asm -fzero-initialized-in-bss

 ;  Compiler executable checksum: e798769d5090625420b1df34770b8edb

	.section	.rodata
.LC0:
	.string	"Welcome to the secure program loader."
.LC1:
	.string	"Please enter second stage load address."
.LC2:
	.string	"Please enter the second stage program."
.LC3:
	.string	"Please enter program signature."
.LC4:
	.string	"Signature valid, executing payload"
.LC5:
	.string	"ACCESS GRANTED"
.LC6:
	.string	"ACCESS DENIED"
.LC7:
	.string	"Incorrect signature, continuing"
.LC8:
	.string	"Load address outside allowed range of 0x8000-0xF000"
	.section	.init9,"ax",@progbits
	.p2align 1,0
.global	main
	.type	main,@function
/***********************
 * Function `main'
 ***********************/
main:
	mov	sp, r4	 ; ,
	add	#2, r4	 ; ,
	add	#llo(-324), sp	 ; ,
	mov	#.LC0, r15	 ; ,
	call	#puts	 ;
.L7:
	mov	#.LC1, r15	 ; ,
	call	#puts	 ;
	mov	#2, r14	 ; ,
	mov	r4, r15	 ; ,
	add	#llo(-326), r15	 ; ,
	call	#getsn	 ;
	mov	#.LC2, r15	 ; ,
	call	#puts	 ;
	mov	r4, r15	 ; , tmp34
	add	#llo(-259), r15	 ; , tmp34
	mov	#257, r14	 ; , tmp36
	mov	r14, r13	 ;  tmp36,
	mov	#0, r14	 ; ,
	call	#memset	 ;
	mov	r4, r15	 ; , tmp38
	add	#llo(-259), r15	 ; , tmp38
	mov	#256, r14	 ; ,
	call	#getsn	 ;
	mov	#.LC3, r15	 ; ,
	call	#puts	 ;
	mov	r4, r15	 ; , tmp39
	add	#llo(-324), r15	 ; , tmp39
	mov	#65, r14	 ; , tmp41
	mov	r14, r13	 ;  tmp41,
	mov	#0, r14	 ; ,
	call	#memset	 ;
	mov	r4, r15	 ; , tmp43
	add	#llo(-324), r15	 ; , tmp43
	mov	#64, r14	 ; ,
	call	#getsn	 ;
	mov	-326(r4), r15	 ;  loadaddr, loadaddr.0
	cmp	#0, r15	 ; , loadaddr.1
	jge	.L2	 ;
	mov	-326(r4), r15	 ;  loadaddr, loadaddr.2
	cmp	#llo(-4095), r15	 ; , loadaddr.3
	jhs	.L2	 ;
	mov	-326(r4), r15	 ;  loadaddr, loadaddr.4
	mov	r4, r14	 ; , tmp44
	add	#llo(-259), r14	 ; , tmp44
	mov	#256, r13	 ; , tmp47
	call	#memcpy	 ;
	mov	-326(r4), r15	 ;  loadaddr, loadaddr.5
	mov	r4, r14	 ; , tmp49
	add	#llo(-324), r14	 ; , tmp49
	mov	r14, r12	 ;  tmp49,
	mov	#256, r13	 ; ,
	mov	r15, r14	 ;  loadaddr.5,
	mov	#9216, r15	 ; ,
	call	#verify_ed25519	 ;
	cmp	#1, r15	 ; , D.1328
	jne	.L3	 ;
	mov	#.LC4, r15	 ; ,
	call	#puts	 ;
	mov	-326(r4), r15	 ;  loadaddr, loadaddr.6
	call	r15	 ;  loadaddr.6
	cmp	#0, r15	 ; , D.1332
	jeq	.L4	 ;
	mov	#.LC5, r15	 ; ,
	call	#puts	 ;
	push	#0	 ;
	push	#0	 ;
	push	#127	 ;
	call	#INT	 ;
	add	#6, sp	 ; ,
	mov	#0, r15	 ; ,
	call	#exit	 ;
.L4:
	mov	#.LC6, r15	 ; ,
	call	#puts	 ;
	jmp	.L6	 ;
.L3:
	mov	#.LC7, r15	 ; ,
	call	#puts	 ;
	jmp	.L6	 ;
.L2:
	mov	#.LC8, r15	 ; ,
	call	#puts	 ;
	jmp	.L7	 ;
.L6:
	jmp	.L7	 ;
.LIRD0:
.Lfe1:
	.size	main,.Lfe1-main
;; End of function

	.text
	.p2align 1,0
.global	INT
	.type	INT,@function
/***********************
 * Function `INT'
 ***********************/
INT:
	push	r4	 ;
	mov	sp, r4	 ; ,
	add	#2, r4	 ; ,
	pop	r4	 ;
	ret
.Lfe2:
	.size	INT,.Lfe2-INT
;; End of function

	.p2align 1,0
.global	verify_ed25519
	.type	verify_ed25519,@function
/***********************
 * Function `verify_ed25519'
 ***********************/
verify_ed25519:
	push	r4	 ;
	mov	sp, r4	 ; ,
	add	#2, r4	 ; ,
	add	#llo(-10), sp	 ; ,
	mov	r15, -10(r4)	 ;  ed25519_pubkey, ed25519_pubkey
	mov	r14, -8(r4)	 ;  buf, buf
	mov	r13, -6(r4)	 ;  size, size
	mov	r12, -4(r4)	 ;  signature, signature
	mov	#0, -12(r4)	 ; , result
	mov	#llo(-12), r15	 ; ,
	add	r4, r15	 ; ,
	push	r15	 ;
	push	-4(r4)	 ;  signature
	push	-6(r4)	 ;  size
	push	-8(r4)	 ;  buf
	push	-10(r4)	 ;  ed25519_pubkey
	push	#51	 ;
	call	#INT	 ;
	add	#12, sp	 ; ,
	mov	-12(r4), r15	 ;  result, D.1316
	add	#10, sp	 ; ,
	pop	r4	 ;
	ret
.Lfe3:
	.size	verify_ed25519,.Lfe3-verify_ed25519
;; End of function

	.p2align 1,0
.global	getsn
	.type	getsn,@function
/***********************
 * Function `getsn'
 ***********************/
getsn:
	push	r4	 ;
	mov	sp, r4	 ; ,
	add	#2, r4	 ; ,
	sub	#4, sp	 ; ,
	mov	r15, -6(r4)	 ;  buf, buf
	mov	r14, -4(r4)	 ;  length, length
	push	-4(r4)	 ;  length
	push	-6(r4)	 ;  buf
	push	#2	 ;
	call	#INT	 ;
	add	#6, sp	 ; ,
	add	#4, sp	 ; ,
	pop	r4	 ;
	ret
.Lfe4:
	.size	getsn,.Lfe4-getsn
;; End of function

	.p2align 1,0
.global	putchar
	.type	putchar,@function
/***********************
 * Function `putchar'
 ***********************/
putchar:
	push	r4	 ;
	mov	sp, r4	 ; ,
	add	#2, r4	 ; ,
	sub	#2, sp	 ; ,
	mov	r15, -4(r4)	 ;  c, c
	push	-4(r4)	 ;  c
	push	#0	 ;
	call	#INT	 ;
	add	#4, sp	 ; ,
	add	#2, sp	 ; ,
	pop	r4	 ;
	ret
.Lfe5:
	.size	putchar,.Lfe5-putchar
;; End of function

	.p2align 1,0
.global	puts
	.type	puts,@function
/***********************
 * Function `puts'
 ***********************/
puts:
	push	r4	 ;
	mov	sp, r4	 ; ,
	add	#2, r4	 ; ,
	sub	#4, sp	 ; ,
	mov	r15, -4(r4)	 ;  str, str
	jmp	.L13	 ;
.L14:
	add	#1, -4(r4)	 ; , str
	mov.b	-6(r4), r15	 ;  c, D.1313
	sxt	r15	 ;  D.1313
	call	#putchar	 ;
.L13:
	mov	-4(r4), r15	 ;  str, tmp27
	mov.b	@r15, -6(r4)	 ;  *str_1, c
	cmp.b	#0, -6(r4)	 ; , c
	jne	.L14	 ;
	mov	#10, r15	 ; ,
	call	#putchar	 ;
	mov	#0, r15	 ; , D.1314
	add	#4, sp	 ; ,
	pop	r4	 ;
	ret
.Lfe6:
	.size	puts,.Lfe6-puts
;; End of function
