diff options
Diffstat (limited to 'src/lib/libcrypto')
79 files changed, 10174 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/add.pl b/src/lib/libcrypto/bn/asm/alpha.works/add.pl new file mode 100644 index 0000000000..4dc76e6b69 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/add.pl | |||
@@ -0,0 +1,119 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_add_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $bp=&wparam(2); | ||
15 | $count=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | &br(&label("finish")); | ||
23 | &blt($count,&label("finish")); | ||
24 | |||
25 | ($a0,$b0)=&NR(2); | ||
26 | &ld($a0,&QWPw(0,$ap)); | ||
27 | &ld($b0,&QWPw(0,$bp)); | ||
28 | |||
29 | ########################################################## | ||
30 | &set_label("loop"); | ||
31 | |||
32 | ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); | ||
33 | ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp)); | ||
34 | ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); | ||
35 | ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp)); | ||
36 | ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); | ||
37 | ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp)); | ||
38 | |||
39 | ($o0,$t0)=&NR(2); | ||
40 | &add($a0,$b0,$o0); | ||
41 | &cmpult($o0,$b0,$t0); | ||
42 | &add($o0,$cc,$o0); | ||
43 | &cmpult($o0,$cc,$cc); | ||
44 | &add($cc,$t0,$cc); &FR($t0); | ||
45 | |||
46 | ($t1,$o1)=&NR(2); | ||
47 | |||
48 | &add($a1,$b1,$o1); &FR($a1); | ||
49 | &cmpult($o1,$b1,$t1); &FR($b1); | ||
50 | &add($o1,$cc,$o1); | ||
51 | &cmpult($o1,$cc,$cc); | ||
52 | &add($cc,$t1,$cc); &FR($t1); | ||
53 | |||
54 | ($t2,$o2)=&NR(2); | ||
55 | |||
56 | &add($a2,$b2,$o2); &FR($a2); | ||
57 | &cmpult($o2,$b2,$t2); &FR($b2); | ||
58 | &add($o2,$cc,$o2); | ||
59 | &cmpult($o2,$cc,$cc); | ||
60 | &add($cc,$t2,$cc); &FR($t2); | ||
61 | |||
62 | ($t3,$o3)=&NR(2); | ||
63 | |||
64 | &add($a3,$b3,$o3); &FR($a3); | ||
65 | &cmpult($o3,$b3,$t3); &FR($b3); | ||
66 | &add($o3,$cc,$o3); | ||
67 | &cmpult($o3,$cc,$cc); | ||
68 | &add($cc,$t3,$cc); &FR($t3); | ||
69 | |||
70 | &st($o0,&QWPw(0,$rp)); &FR($o0); | ||
71 | &st($o1,&QWPw(0,$rp)); &FR($o1); | ||
72 | &st($o2,&QWPw(0,$rp)); &FR($o2); | ||
73 | &st($o3,&QWPw(0,$rp)); &FR($o3); | ||
74 | |||
75 | &sub($count,4,$count); # count-=4 | ||
76 | &add($ap,4*$QWS,$ap); # count+=4 | ||
77 | &add($bp,4*$QWS,$bp); # count+=4 | ||
78 | &add($rp,4*$QWS,$rp); # count+=4 | ||
79 | |||
80 | &blt($count,&label("finish")); | ||
81 | &ld($a0,&QWPw(0,$ap)); | ||
82 | &ld($b0,&QWPw(0,$bp)); | ||
83 | &br(&label("loop")); | ||
84 | ################################################## | ||
85 | # Do the last 0..3 words | ||
86 | |||
87 | ($t0,$o0)=&NR(2); | ||
88 | &set_label("last_loop"); | ||
89 | |||
90 | &ld($a0,&QWPw(0,$ap)); # get a | ||
91 | &ld($b0,&QWPw(0,$bp)); # get b | ||
92 | |||
93 | &add($a0,$b0,$o0); | ||
94 | &cmpult($o0,$b0,$t0); # will we borrow? | ||
95 | &add($o0,$cc,$o0); # will we borrow? | ||
96 | &cmpult($o0,$cc,$cc); # will we borrow? | ||
97 | &add($cc,$t0,$cc); # add the borrows | ||
98 | &st($o0,&QWPw(0,$rp)); # save | ||
99 | |||
100 | &add($ap,$QWS,$ap); | ||
101 | &add($bp,$QWS,$bp); | ||
102 | &add($rp,$QWS,$rp); | ||
103 | &sub($count,1,$count); | ||
104 | &bgt($count,&label("last_loop")); | ||
105 | &function_end_A($name); | ||
106 | |||
107 | ###################################################### | ||
108 | &set_label("finish"); | ||
109 | &add($count,4,$count); | ||
110 | &bgt($count,&label("last_loop")); | ||
111 | |||
112 | &FR($o0,$t0,$a0,$b0); | ||
113 | &set_label("end"); | ||
114 | &function_end($name); | ||
115 | |||
116 | &fin_pool; | ||
117 | } | ||
118 | |||
119 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/div.pl b/src/lib/libcrypto/bn/asm/alpha.works/div.pl new file mode 100644 index 0000000000..7ec144377f --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/div.pl | |||
@@ -0,0 +1,144 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | |||
3 | sub bn_div64 | ||
4 | { | ||
5 | local($data)=<<'EOF'; | ||
6 | # | ||
7 | # What follows was taken directly from the C compiler with a few | ||
8 | # hacks to redo the lables. | ||
9 | # | ||
10 | .text | ||
11 | .set noreorder | ||
12 | .set volatile | ||
13 | .align 3 | ||
14 | .globl bn_div64 | ||
15 | .ent bn_div64 | ||
16 | bn_div64: | ||
17 | ldgp $29,0($27) | ||
18 | bn_div64..ng: | ||
19 | lda $30,-48($30) | ||
20 | .frame $30,48,$26,0 | ||
21 | stq $26,0($30) | ||
22 | stq $9,8($30) | ||
23 | stq $10,16($30) | ||
24 | stq $11,24($30) | ||
25 | stq $12,32($30) | ||
26 | stq $13,40($30) | ||
27 | .mask 0x4003e00,-48 | ||
28 | .prologue 1 | ||
29 | bis $16,$16,$9 | ||
30 | bis $17,$17,$10 | ||
31 | bis $18,$18,$11 | ||
32 | bis $31,$31,$13 | ||
33 | bis $31,2,$12 | ||
34 | bne $11,$9119 | ||
35 | lda $0,-1 | ||
36 | br $31,$9136 | ||
37 | .align 4 | ||
38 | $9119: | ||
39 | bis $11,$11,$16 | ||
40 | jsr $26,BN_num_bits_word | ||
41 | ldgp $29,0($26) | ||
42 | subq $0,64,$1 | ||
43 | beq $1,$9120 | ||
44 | bis $31,1,$1 | ||
45 | sll $1,$0,$1 | ||
46 | cmpule $9,$1,$1 | ||
47 | bne $1,$9120 | ||
48 | # lda $16,_IO_stderr_ | ||
49 | # lda $17,$C32 | ||
50 | # bis $0,$0,$18 | ||
51 | # jsr $26,fprintf | ||
52 | # ldgp $29,0($26) | ||
53 | jsr $26,abort | ||
54 | ldgp $29,0($26) | ||
55 | .align 4 | ||
56 | $9120: | ||
57 | bis $31,64,$3 | ||
58 | cmpult $9,$11,$2 | ||
59 | subq $3,$0,$1 | ||
60 | addl $1,$31,$0 | ||
61 | subq $9,$11,$1 | ||
62 | cmoveq $2,$1,$9 | ||
63 | beq $0,$9122 | ||
64 | zapnot $0,15,$2 | ||
65 | subq $3,$0,$1 | ||
66 | sll $11,$2,$11 | ||
67 | sll $9,$2,$3 | ||
68 | srl $10,$1,$1 | ||
69 | sll $10,$2,$10 | ||
70 | bis $3,$1,$9 | ||
71 | $9122: | ||
72 | srl $11,32,$5 | ||
73 | zapnot $11,15,$6 | ||
74 | lda $7,-1 | ||
75 | .align 5 | ||
76 | $9123: | ||
77 | srl $9,32,$1 | ||
78 | subq $1,$5,$1 | ||
79 | bne $1,$9126 | ||
80 | zapnot $7,15,$27 | ||
81 | br $31,$9127 | ||
82 | .align 4 | ||
83 | $9126: | ||
84 | bis $9,$9,$24 | ||
85 | bis $5,$5,$25 | ||
86 | divqu $24,$25,$27 | ||
87 | $9127: | ||
88 | srl $10,32,$4 | ||
89 | .align 5 | ||
90 | $9128: | ||
91 | mulq $27,$5,$1 | ||
92 | subq $9,$1,$3 | ||
93 | zapnot $3,240,$1 | ||
94 | bne $1,$9129 | ||
95 | mulq $6,$27,$2 | ||
96 | sll $3,32,$1 | ||
97 | addq $1,$4,$1 | ||
98 | cmpule $2,$1,$2 | ||
99 | bne $2,$9129 | ||
100 | subq $27,1,$27 | ||
101 | br $31,$9128 | ||
102 | .align 4 | ||
103 | $9129: | ||
104 | mulq $27,$6,$1 | ||
105 | mulq $27,$5,$4 | ||
106 | srl $1,32,$3 | ||
107 | sll $1,32,$1 | ||
108 | addq $4,$3,$4 | ||
109 | cmpult $10,$1,$2 | ||
110 | subq $10,$1,$10 | ||
111 | addq $2,$4,$2 | ||
112 | cmpult $9,$2,$1 | ||
113 | bis $2,$2,$4 | ||
114 | beq $1,$9134 | ||
115 | addq $9,$11,$9 | ||
116 | subq $27,1,$27 | ||
117 | $9134: | ||
118 | subl $12,1,$12 | ||
119 | subq $9,$4,$9 | ||
120 | beq $12,$9124 | ||
121 | sll $27,32,$13 | ||
122 | sll $9,32,$2 | ||
123 | srl $10,32,$1 | ||
124 | sll $10,32,$10 | ||
125 | bis $2,$1,$9 | ||
126 | br $31,$9123 | ||
127 | .align 4 | ||
128 | $9124: | ||
129 | bis $13,$27,$0 | ||
130 | $9136: | ||
131 | ldq $26,0($30) | ||
132 | ldq $9,8($30) | ||
133 | ldq $10,16($30) | ||
134 | ldq $11,24($30) | ||
135 | ldq $12,32($30) | ||
136 | ldq $13,40($30) | ||
137 | addq $30,48,$30 | ||
138 | ret $31,($26),1 | ||
139 | .end bn_div64 | ||
140 | EOF | ||
141 | &asm_add($data); | ||
142 | } | ||
143 | |||
144 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul.pl new file mode 100644 index 0000000000..b182bae452 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/mul.pl | |||
@@ -0,0 +1,116 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_mul_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r,$couny); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $count=&wparam(2); | ||
15 | $word=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | &br(&label("finish")); | ||
23 | &blt($count,&label("finish")); | ||
24 | |||
25 | ($a0,$r0)=&NR(2); | ||
26 | &ld($a0,&QWPw(0,$ap)); | ||
27 | &ld($r0,&QWPw(0,$rp)); | ||
28 | |||
29 | $a=<<'EOF'; | ||
30 | ########################################################## | ||
31 | &set_label("loop"); | ||
32 | |||
33 | ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); | ||
34 | ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp)); | ||
35 | ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); | ||
36 | ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp)); | ||
37 | ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); | ||
38 | ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp)); | ||
39 | |||
40 | ($o0,$t0)=&NR(2); | ||
41 | &add($a0,$b0,$o0); | ||
42 | &cmpult($o0,$b0,$t0); | ||
43 | &add($o0,$cc,$o0); | ||
44 | &cmpult($o0,$cc,$cc); | ||
45 | &add($cc,$t0,$cc); &FR($t0); | ||
46 | |||
47 | ($t1,$o1)=&NR(2); | ||
48 | |||
49 | &add($a1,$b1,$o1); &FR($a1); | ||
50 | &cmpult($o1,$b1,$t1); &FR($b1); | ||
51 | &add($o1,$cc,$o1); | ||
52 | &cmpult($o1,$cc,$cc); | ||
53 | &add($cc,$t1,$cc); &FR($t1); | ||
54 | |||
55 | ($t2,$o2)=&NR(2); | ||
56 | |||
57 | &add($a2,$b2,$o2); &FR($a2); | ||
58 | &cmpult($o2,$b2,$t2); &FR($b2); | ||
59 | &add($o2,$cc,$o2); | ||
60 | &cmpult($o2,$cc,$cc); | ||
61 | &add($cc,$t2,$cc); &FR($t2); | ||
62 | |||
63 | ($t3,$o3)=&NR(2); | ||
64 | |||
65 | &add($a3,$b3,$o3); &FR($a3); | ||
66 | &cmpult($o3,$b3,$t3); &FR($b3); | ||
67 | &add($o3,$cc,$o3); | ||
68 | &cmpult($o3,$cc,$cc); | ||
69 | &add($cc,$t3,$cc); &FR($t3); | ||
70 | |||
71 | &st($o0,&QWPw(0,$rp)); &FR($o0); | ||
72 | &st($o1,&QWPw(0,$rp)); &FR($o1); | ||
73 | &st($o2,&QWPw(0,$rp)); &FR($o2); | ||
74 | &st($o3,&QWPw(0,$rp)); &FR($o3); | ||
75 | |||
76 | &sub($count,4,$count); # count-=4 | ||
77 | &add($ap,4*$QWS,$ap); # count+=4 | ||
78 | &add($bp,4*$QWS,$bp); # count+=4 | ||
79 | &add($rp,4*$QWS,$rp); # count+=4 | ||
80 | |||
81 | &blt($count,&label("finish")); | ||
82 | &ld($a0,&QWPw(0,$ap)); | ||
83 | &ld($b0,&QWPw(0,$bp)); | ||
84 | &br(&label("loop")); | ||
85 | EOF | ||
86 | ################################################## | ||
87 | # Do the last 0..3 words | ||
88 | |||
89 | &set_label("last_loop"); | ||
90 | |||
91 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a | ||
92 | &mul($a0,$word,($l0)=&NR(1)); | ||
93 | &add($ap,$QWS,$ap); | ||
94 | &muh($a0,$word,($h0)=&NR(1)); &FR($a0); | ||
95 | &add($l0,$cc,$l0); | ||
96 | &add($rp,$QWS,$rp); | ||
97 | &sub($count,1,$count); | ||
98 | &cmpult($l0,$cc,$cc); | ||
99 | &st($l0,&QWPw(-1,$rp)); &FR($l0); | ||
100 | &add($h0,$cc,$cc); &FR($h0); | ||
101 | |||
102 | &bgt($count,&label("last_loop")); | ||
103 | &function_end_A($name); | ||
104 | |||
105 | ###################################################### | ||
106 | &set_label("finish"); | ||
107 | &add($count,4,$count); | ||
108 | &bgt($count,&label("last_loop")); | ||
109 | |||
110 | &set_label("end"); | ||
111 | &function_end($name); | ||
112 | |||
113 | &fin_pool; | ||
114 | } | ||
115 | |||
116 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl new file mode 100644 index 0000000000..e37f6315fb --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl | |||
@@ -0,0 +1,120 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_mul_add_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r,$couny); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $count=&wparam(2); | ||
15 | $word=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | &br(&label("finish")); | ||
23 | &blt($count,&label("finish")); | ||
24 | |||
25 | ($a0,$r0)=&NR(2); | ||
26 | &ld($a0,&QWPw(0,$ap)); | ||
27 | &ld($r0,&QWPw(0,$rp)); | ||
28 | |||
29 | $a=<<'EOF'; | ||
30 | ########################################################## | ||
31 | &set_label("loop"); | ||
32 | |||
33 | ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); | ||
34 | ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp)); | ||
35 | ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); | ||
36 | ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp)); | ||
37 | ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); | ||
38 | ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp)); | ||
39 | |||
40 | ($o0,$t0)=&NR(2); | ||
41 | &add($a0,$b0,$o0); | ||
42 | &cmpult($o0,$b0,$t0); | ||
43 | &add($o0,$cc,$o0); | ||
44 | &cmpult($o0,$cc,$cc); | ||
45 | &add($cc,$t0,$cc); &FR($t0); | ||
46 | |||
47 | ($t1,$o1)=&NR(2); | ||
48 | |||
49 | &add($a1,$b1,$o1); &FR($a1); | ||
50 | &cmpult($o1,$b1,$t1); &FR($b1); | ||
51 | &add($o1,$cc,$o1); | ||
52 | &cmpult($o1,$cc,$cc); | ||
53 | &add($cc,$t1,$cc); &FR($t1); | ||
54 | |||
55 | ($t2,$o2)=&NR(2); | ||
56 | |||
57 | &add($a2,$b2,$o2); &FR($a2); | ||
58 | &cmpult($o2,$b2,$t2); &FR($b2); | ||
59 | &add($o2,$cc,$o2); | ||
60 | &cmpult($o2,$cc,$cc); | ||
61 | &add($cc,$t2,$cc); &FR($t2); | ||
62 | |||
63 | ($t3,$o3)=&NR(2); | ||
64 | |||
65 | &add($a3,$b3,$o3); &FR($a3); | ||
66 | &cmpult($o3,$b3,$t3); &FR($b3); | ||
67 | &add($o3,$cc,$o3); | ||
68 | &cmpult($o3,$cc,$cc); | ||
69 | &add($cc,$t3,$cc); &FR($t3); | ||
70 | |||
71 | &st($o0,&QWPw(0,$rp)); &FR($o0); | ||
72 | &st($o1,&QWPw(0,$rp)); &FR($o1); | ||
73 | &st($o2,&QWPw(0,$rp)); &FR($o2); | ||
74 | &st($o3,&QWPw(0,$rp)); &FR($o3); | ||
75 | |||
76 | &sub($count,4,$count); # count-=4 | ||
77 | &add($ap,4*$QWS,$ap); # count+=4 | ||
78 | &add($bp,4*$QWS,$bp); # count+=4 | ||
79 | &add($rp,4*$QWS,$rp); # count+=4 | ||
80 | |||
81 | &blt($count,&label("finish")); | ||
82 | &ld($a0,&QWPw(0,$ap)); | ||
83 | &ld($b0,&QWPw(0,$bp)); | ||
84 | &br(&label("loop")); | ||
85 | EOF | ||
86 | ################################################## | ||
87 | # Do the last 0..3 words | ||
88 | |||
89 | &set_label("last_loop"); | ||
90 | |||
91 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a | ||
92 | &ld(($r0)=&NR(1),&QWPw(0,$rp)); # get b | ||
93 | &mul($a0,$word,($l0)=&NR(1)); | ||
94 | &sub($count,1,$count); | ||
95 | &add($ap,$QWS,$ap); | ||
96 | &muh($a0,$word,($h0)=&NR(1)); &FR($a0); | ||
97 | &add($r0,$l0,$r0); | ||
98 | &add($rp,$QWS,$rp); | ||
99 | &cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0); | ||
100 | &add($r0,$cc,$r0); | ||
101 | &add($h0,$t0,$h0); &FR($t0); | ||
102 | &cmpult($r0,$cc,$cc); | ||
103 | &st($r0,&QWPw(-1,$rp)); &FR($r0); | ||
104 | &add($h0,$cc,$cc); &FR($h0); | ||
105 | |||
106 | &bgt($count,&label("last_loop")); | ||
107 | &function_end_A($name); | ||
108 | |||
109 | ###################################################### | ||
110 | &set_label("finish"); | ||
111 | &add($count,4,$count); | ||
112 | &bgt($count,&label("last_loop")); | ||
113 | |||
114 | &set_label("end"); | ||
115 | &function_end($name); | ||
116 | |||
117 | &fin_pool; | ||
118 | } | ||
119 | |||
120 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl new file mode 100644 index 0000000000..5efd201281 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl | |||
@@ -0,0 +1,213 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub mul_add_c | ||
5 | { | ||
6 | local($a,$b,$c0,$c1,$c2)=@_; | ||
7 | local($l1,$h1,$t1,$t2); | ||
8 | |||
9 | &mul($a,$b,($l1)=&NR(1)); | ||
10 | &muh($a,$b,($h1)=&NR(1)); | ||
11 | &add($c0,$l1,$c0); | ||
12 | &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); | ||
13 | &add($t1,$h1,$h1); &FR($t1); | ||
14 | &add($c1,$h1,$c1); | ||
15 | &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); | ||
16 | &add($c2,$t2,$c2); &FR($t2); | ||
17 | } | ||
18 | |||
19 | sub bn_mul_comba4 | ||
20 | { | ||
21 | local($name)=@_; | ||
22 | local(@a,@b,$r,$c0,$c1,$c2); | ||
23 | |||
24 | $cnt=1; | ||
25 | &init_pool(3); | ||
26 | |||
27 | $rp=&wparam(0); | ||
28 | $ap=&wparam(1); | ||
29 | $bp=&wparam(2); | ||
30 | |||
31 | &function_begin($name,""); | ||
32 | |||
33 | &comment(""); | ||
34 | |||
35 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
36 | &ld(($b[0])=&NR(1),&QWPw(0,$bp)); | ||
37 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
38 | &ld(($b[1])=&NR(1),&QWPw(1,$bp)); | ||
39 | &mul($a[0],$b[0],($r00)=&NR(1)); | ||
40 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
41 | &ld(($b[2])=&NR(1),&QWPw(2,$bp)); | ||
42 | &muh($a[0],$b[0],($r01)=&NR(1)); | ||
43 | &FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap)); | ||
44 | &FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp)); | ||
45 | &mul($a[0],$b[1],($r02)=&NR(1)); | ||
46 | |||
47 | ($R,$H1,$H2)=&NR(3); | ||
48 | |||
49 | &st($r00,&QWPw(0,$rp)); &FR($r00); | ||
50 | |||
51 | &mov("zero",$R); | ||
52 | &mul($a[1],$b[0],($r03)=&NR(1)); | ||
53 | |||
54 | &mov("zero",$H1); | ||
55 | &mov("zero",$H0); | ||
56 | &add($R,$r01,$R); | ||
57 | &muh($a[0],$b[1],($r04)=&NR(1)); | ||
58 | &cmpult($R,$r01,($t01)=&NR(1)); &FR($r01); | ||
59 | &add($R,$r02,$R); | ||
60 | &add($H1,$t01,$H1) &FR($t01); | ||
61 | &muh($a[1],$b[0],($r05)=&NR(1)); | ||
62 | &cmpult($R,$r02,($t02)=&NR(1)); &FR($r02); | ||
63 | &add($R,$r03,$R); | ||
64 | &add($H2,$t02,$H2) &FR($t02); | ||
65 | &mul($a[0],$b[2],($r06)=&NR(1)); | ||
66 | &cmpult($R,$r03,($t03)=&NR(1)); &FR($r03); | ||
67 | &add($H1,$t03,$H1) &FR($t03); | ||
68 | &st($R,&QWPw(1,$rp)); | ||
69 | &add($H1,$H2,$R); | ||
70 | |||
71 | &mov("zero",$H1); | ||
72 | &add($R,$r04,$R); | ||
73 | &mov("zero",$H2); | ||
74 | &mul($a[1],$b[1],($r07)=&NR(1)); | ||
75 | &cmpult($R,$r04,($t04)=&NR(1)); &FR($r04); | ||
76 | &add($R,$r05,$R); | ||
77 | &add($H1,$t04,$H1) &FR($t04); | ||
78 | &mul($a[2],$b[0],($r08)=&NR(1)); | ||
79 | &cmpult($R,$r05,($t05)=&NR(1)); &FR($r05); | ||
80 | &add($R,$r01,$R); | ||
81 | &add($H2,$t05,$H2) &FR($t05); | ||
82 | &muh($a[0],$b[2],($r09)=&NR(1)); | ||
83 | &cmpult($R,$r06,($t06)=&NR(1)); &FR($r06); | ||
84 | &add($R,$r07,$R); | ||
85 | &add($H1,$t06,$H1) &FR($t06); | ||
86 | &muh($a[1],$b[1],($r10)=&NR(1)); | ||
87 | &cmpult($R,$r07,($t07)=&NR(1)); &FR($r07); | ||
88 | &add($R,$r08,$R); | ||
89 | &add($H2,$t07,$H2) &FR($t07); | ||
90 | &muh($a[2],$b[0],($r11)=&NR(1)); | ||
91 | &cmpult($R,$r08,($t08)=&NR(1)); &FR($r08); | ||
92 | &add($H1,$t08,$H1) &FR($t08); | ||
93 | &st($R,&QWPw(2,$rp)); | ||
94 | &add($H1,$H2,$R); | ||
95 | |||
96 | &mov("zero",$H1); | ||
97 | &add($R,$r09,$R); | ||
98 | &mov("zero",$H2); | ||
99 | &mul($a[0],$b[3],($r12)=&NR(1)); | ||
100 | &cmpult($R,$r09,($t09)=&NR(1)); &FR($r09); | ||
101 | &add($R,$r10,$R); | ||
102 | &add($H1,$t09,$H1) &FR($t09); | ||
103 | &mul($a[1],$b[2],($r13)=&NR(1)); | ||
104 | &cmpult($R,$r10,($t10)=&NR(1)); &FR($r10); | ||
105 | &add($R,$r11,$R); | ||
106 | &add($H1,$t10,$H1) &FR($t10); | ||
107 | &mul($a[2],$b[1],($r14)=&NR(1)); | ||
108 | &cmpult($R,$r11,($t11)=&NR(1)); &FR($r11); | ||
109 | &add($R,$r12,$R); | ||
110 | &add($H1,$t11,$H1) &FR($t11); | ||
111 | &mul($a[3],$b[0],($r15)=&NR(1)); | ||
112 | &cmpult($R,$r12,($t12)=&NR(1)); &FR($r12); | ||
113 | &add($R,$r13,$R); | ||
114 | &add($H1,$t12,$H1) &FR($t12); | ||
115 | &muh($a[0],$b[3],($r16)=&NR(1)); | ||
116 | &cmpult($R,$r13,($t13)=&NR(1)); &FR($r13); | ||
117 | &add($R,$r14,$R); | ||
118 | &add($H1,$t13,$H1) &FR($t13); | ||
119 | &muh($a[1],$b[2],($r17)=&NR(1)); | ||
120 | &cmpult($R,$r14,($t14)=&NR(1)); &FR($r14); | ||
121 | &add($R,$r15,$R); | ||
122 | &add($H1,$t14,$H1) &FR($t14); | ||
123 | &muh($a[2],$b[1],($r18)=&NR(1)); | ||
124 | &cmpult($R,$r15,($t15)=&NR(1)); &FR($r15); | ||
125 | &add($H1,$t15,$H1) &FR($t15); | ||
126 | &st($R,&QWPw(3,$rp)); | ||
127 | &add($H1,$H2,$R); | ||
128 | |||
129 | &mov("zero",$H1); | ||
130 | &add($R,$r16,$R); | ||
131 | &mov("zero",$H2); | ||
132 | &muh($a[3],$b[0],($r19)=&NR(1)); | ||
133 | &cmpult($R,$r16,($t16)=&NR(1)); &FR($r16); | ||
134 | &add($R,$r17,$R); | ||
135 | &add($H1,$t16,$H1) &FR($t16); | ||
136 | &mul($a[1],$b[3],($r20)=&NR(1)); | ||
137 | &cmpult($R,$r17,($t17)=&NR(1)); &FR($r17); | ||
138 | &add($R,$r18,$R); | ||
139 | &add($H1,$t17,$H1) &FR($t17); | ||
140 | &mul($a[2],$b[2],($r21)=&NR(1)); | ||
141 | &cmpult($R,$r18,($t18)=&NR(1)); &FR($r18); | ||
142 | &add($R,$r19,$R); | ||
143 | &add($H1,$t18,$H1) &FR($t18); | ||
144 | &mul($a[3],$b[1],($r22)=&NR(1)); | ||
145 | &cmpult($R,$r19,($t19)=&NR(1)); &FR($r19); | ||
146 | &add($R,$r20,$R); | ||
147 | &add($H1,$t19,$H1) &FR($t19); | ||
148 | &muh($a[1],$b[3],($r23)=&NR(1)); | ||
149 | &cmpult($R,$r20,($t20)=&NR(1)); &FR($r20); | ||
150 | &add($R,$r21,$R); | ||
151 | &add($H1,$t20,$H1) &FR($t20); | ||
152 | &muh($a[2],$b[2],($r24)=&NR(1)); | ||
153 | &cmpult($R,$r21,($t21)=&NR(1)); &FR($r21); | ||
154 | &add($R,$r22,$R); | ||
155 | &add($H1,$t21,$H1) &FR($t21); | ||
156 | &muh($a[3],$b[1],($r25)=&NR(1)); | ||
157 | &cmpult($R,$r22,($t22)=&NR(1)); &FR($r22); | ||
158 | &add($H1,$t22,$H1) &FR($t22); | ||
159 | &st($R,&QWPw(4,$rp)); | ||
160 | &add($H1,$H2,$R); | ||
161 | |||
162 | &mov("zero",$H1); | ||
163 | &add($R,$r23,$R); | ||
164 | &mov("zero",$H2); | ||
165 | &mul($a[2],$b[3],($r26)=&NR(1)); | ||
166 | &cmpult($R,$r23,($t23)=&NR(1)); &FR($r23); | ||
167 | &add($R,$r24,$R); | ||
168 | &add($H1,$t23,$H1) &FR($t23); | ||
169 | &mul($a[3],$b[2],($r27)=&NR(1)); | ||
170 | &cmpult($R,$r24,($t24)=&NR(1)); &FR($r24); | ||
171 | &add($R,$r25,$R); | ||
172 | &add($H1,$t24,$H1) &FR($t24); | ||
173 | &muh($a[2],$b[3],($r28)=&NR(1)); | ||
174 | &cmpult($R,$r25,($t25)=&NR(1)); &FR($r25); | ||
175 | &add($R,$r26,$R); | ||
176 | &add($H1,$t25,$H1) &FR($t25); | ||
177 | &muh($a[3],$b[2],($r29)=&NR(1)); | ||
178 | &cmpult($R,$r26,($t26)=&NR(1)); &FR($r26); | ||
179 | &add($R,$r27,$R); | ||
180 | &add($H1,$t26,$H1) &FR($t26); | ||
181 | &mul($a[3],$b[3],($r30)=&NR(1)); | ||
182 | &cmpult($R,$r27,($t27)=&NR(1)); &FR($r27); | ||
183 | &add($H1,$t27,$H1) &FR($t27); | ||
184 | &st($R,&QWPw(5,$rp)); | ||
185 | &add($H1,$H2,$R); | ||
186 | |||
187 | &mov("zero",$H1); | ||
188 | &add($R,$r28,$R); | ||
189 | &mov("zero",$H2); | ||
190 | &muh($a[3],$b[3],($r31)=&NR(1)); | ||
191 | &cmpult($R,$r28,($t28)=&NR(1)); &FR($r28); | ||
192 | &add($R,$r29,$R); | ||
193 | &add($H1,$t28,$H1) &FR($t28); | ||
194 | ############ | ||
195 | &cmpult($R,$r29,($t29)=&NR(1)); &FR($r29); | ||
196 | &add($R,$r30,$R); | ||
197 | &add($H1,$t29,$H1) &FR($t29); | ||
198 | ############ | ||
199 | &cmpult($R,$r30,($t30)=&NR(1)); &FR($r30); | ||
200 | &add($H1,$t30,$H1) &FR($t30); | ||
201 | &st($R,&QWPw(6,$rp)); | ||
202 | &add($H1,$H2,$R); | ||
203 | |||
204 | &add($R,$r31,$R); &FR($r31); | ||
205 | &st($R,&QWPw(7,$rp)); | ||
206 | |||
207 | &FR($R,$H1,$H2); | ||
208 | &function_end($name); | ||
209 | |||
210 | &fin_pool; | ||
211 | } | ||
212 | |||
213 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl new file mode 100644 index 0000000000..79d86dd25c --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl | |||
@@ -0,0 +1,98 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub mul_add_c | ||
5 | { | ||
6 | local($a,$b,$c0,$c1,$c2)=@_; | ||
7 | local($l1,$h1,$t1,$t2); | ||
8 | |||
9 | print STDERR "count=$cnt\n"; $cnt++; | ||
10 | &mul($a,$b,($l1)=&NR(1)); | ||
11 | &muh($a,$b,($h1)=&NR(1)); | ||
12 | &add($c0,$l1,$c0); | ||
13 | &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); | ||
14 | &add($t1,$h1,$h1); &FR($t1); | ||
15 | &add($c1,$h1,$c1); | ||
16 | &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); | ||
17 | &add($c2,$t2,$c2); &FR($t2); | ||
18 | } | ||
19 | |||
20 | sub bn_mul_comba4 | ||
21 | { | ||
22 | local($name)=@_; | ||
23 | local(@a,@b,$r,$c0,$c1,$c2); | ||
24 | |||
25 | $cnt=1; | ||
26 | &init_pool(3); | ||
27 | |||
28 | $rp=&wparam(0); | ||
29 | $ap=&wparam(1); | ||
30 | $bp=&wparam(2); | ||
31 | |||
32 | &function_begin($name,""); | ||
33 | |||
34 | &comment(""); | ||
35 | |||
36 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
37 | &ld(($b[0])=&NR(1),&QWPw(0,$bp)); | ||
38 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
39 | &ld(($b[1])=&NR(1),&QWPw(1,$bp)); | ||
40 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
41 | &ld(($b[2])=&NR(1),&QWPw(2,$bp)); | ||
42 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap); | ||
43 | &ld(($b[3])=&NR(1),&QWPw(3,$bp)); &FR($bp); | ||
44 | |||
45 | ($c0,$c1,$c2)=&NR(3); | ||
46 | &mov("zero",$c2); | ||
47 | &mul($a[0],$b[0],$c0); | ||
48 | &muh($a[0],$b[0],$c1); | ||
49 | &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
50 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
51 | &mov("zero",$c2); | ||
52 | |||
53 | &mul_add_c($a[0],$b[1],$c0,$c1,$c2); | ||
54 | &mul_add_c($a[1],$b[0],$c0,$c1,$c2); | ||
55 | &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
56 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
57 | &mov("zero",$c2); | ||
58 | |||
59 | &mul_add_c($a[1],$b[1],$c0,$c1,$c2); | ||
60 | &mul_add_c($a[0],$b[2],$c0,$c1,$c2); | ||
61 | &mul_add_c($a[2],$b[0],$c0,$c1,$c2); | ||
62 | &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
63 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
64 | &mov("zero",$c2); | ||
65 | |||
66 | &mul_add_c($a[0],$b[3],$c0,$c1,$c2); &FR($a[0]); | ||
67 | &mul_add_c($a[1],$b[2],$c0,$c1,$c2); | ||
68 | &mul_add_c($a[2],$b[1],$c0,$c1,$c2); | ||
69 | &mul_add_c($a[3],$b[0],$c0,$c1,$c2); &FR($b[0]); | ||
70 | &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
71 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
72 | &mov("zero",$c2); | ||
73 | |||
74 | &mul_add_c($a[1],$b[3],$c0,$c1,$c2); &FR($a[1]); | ||
75 | &mul_add_c($a[2],$b[2],$c0,$c1,$c2); | ||
76 | &mul_add_c($a[3],$b[1],$c0,$c1,$c2); &FR($b[1]); | ||
77 | &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
78 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
79 | &mov("zero",$c2); | ||
80 | |||
81 | &mul_add_c($a[2],$b[3],$c0,$c1,$c2); &FR($a[2]); | ||
82 | &mul_add_c($a[3],$b[2],$c0,$c1,$c2); &FR($b[2]); | ||
83 | &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
84 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
85 | &mov("zero",$c2); | ||
86 | |||
87 | &mul_add_c($a[3],$b[3],$c0,$c1,$c2); &FR($a[3],$b[3]); | ||
88 | &st($c0,&QWPw(6,$rp)); | ||
89 | &st($c1,&QWPw(7,$rp)); | ||
90 | |||
91 | &FR($c0,$c1,$c2); | ||
92 | |||
93 | &function_end($name); | ||
94 | |||
95 | &fin_pool; | ||
96 | } | ||
97 | |||
98 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl new file mode 100644 index 0000000000..525ca7494b --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl | |||
@@ -0,0 +1,177 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_mul_comba8 | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local(@a,@b,$r,$c0,$c1,$c2); | ||
8 | |||
9 | $cnt=1; | ||
10 | &init_pool(3); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $bp=&wparam(2); | ||
15 | |||
16 | &function_begin($name,""); | ||
17 | |||
18 | &comment(""); | ||
19 | |||
20 | &stack_push(2); | ||
21 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
22 | &ld(($b[0])=&NR(1),&QWPw(0,$bp)); | ||
23 | &st($reg_s0,&swtmp(0)); &FR($reg_s0); | ||
24 | &st($reg_s1,&swtmp(1)); &FR($reg_s1); | ||
25 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
26 | &ld(($b[1])=&NR(1),&QWPw(1,$bp)); | ||
27 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
28 | &ld(($b[2])=&NR(1),&QWPw(2,$bp)); | ||
29 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); | ||
30 | &ld(($b[3])=&NR(1),&QWPw(3,$bp)); | ||
31 | &ld(($a[4])=&NR(1),&QWPw(1,$ap)); | ||
32 | &ld(($b[4])=&NR(1),&QWPw(1,$bp)); | ||
33 | &ld(($a[5])=&NR(1),&QWPw(1,$ap)); | ||
34 | &ld(($b[5])=&NR(1),&QWPw(1,$bp)); | ||
35 | &ld(($a[6])=&NR(1),&QWPw(1,$ap)); | ||
36 | &ld(($b[6])=&NR(1),&QWPw(1,$bp)); | ||
37 | &ld(($a[7])=&NR(1),&QWPw(1,$ap)); &FR($ap); | ||
38 | &ld(($b[7])=&NR(1),&QWPw(1,$bp)); &FR($bp); | ||
39 | |||
40 | ($c0,$c1,$c2)=&NR(3); | ||
41 | &mov("zero",$c2); | ||
42 | &mul($a[0],$b[0],$c0); | ||
43 | &muh($a[0],$b[0],$c1); | ||
44 | &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR(1); | ||
45 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
46 | &mov("zero",$c2); | ||
47 | |||
48 | &mul_add_c($a[0],$b[1],$c0,$c1,$c2); | ||
49 | &mul_add_c($a[1],$b[0],$c0,$c1,$c2); | ||
50 | &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR(1); | ||
51 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
52 | &mov("zero",$c2); | ||
53 | |||
54 | &mul_add_c($a[0],$b[2],$c0,$c1,$c2); | ||
55 | &mul_add_c($a[1],$b[1],$c0,$c1,$c2); | ||
56 | &mul_add_c($a[2],$b[0],$c0,$c1,$c2); | ||
57 | &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR(1); | ||
58 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
59 | &mov("zero",$c2); | ||
60 | |||
61 | &mul_add_c($a[0],$b[3],$c0,$c1,$c2); | ||
62 | &mul_add_c($a[1],$b[2],$c0,$c1,$c2); | ||
63 | &mul_add_c($a[2],$b[1],$c0,$c1,$c2); | ||
64 | &mul_add_c($a[3],$b[0],$c0,$c1,$c2); | ||
65 | &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR(1); | ||
66 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
67 | &mov("zero",$c2); | ||
68 | |||
69 | &mul_add_c($a[0],$b[4],$c0,$c1,$c2); | ||
70 | &mul_add_c($a[1],$b[3],$c0,$c1,$c2); | ||
71 | &mul_add_c($a[2],$b[2],$c0,$c1,$c2); | ||
72 | &mul_add_c($a[3],$b[1],$c0,$c1,$c2); | ||
73 | &mul_add_c($a[4],$b[0],$c0,$c1,$c2); | ||
74 | &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR(1); | ||
75 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
76 | &mov("zero",$c2); | ||
77 | |||
78 | &mul_add_c($a[0],$b[5],$c0,$c1,$c2); | ||
79 | &mul_add_c($a[1],$b[4],$c0,$c1,$c2); | ||
80 | &mul_add_c($a[2],$b[3],$c0,$c1,$c2); | ||
81 | &mul_add_c($a[3],$b[2],$c0,$c1,$c2); | ||
82 | &mul_add_c($a[4],$b[1],$c0,$c1,$c2); | ||
83 | &mul_add_c($a[5],$b[0],$c0,$c1,$c2); | ||
84 | &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR(1); | ||
85 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
86 | &mov("zero",$c2); | ||
87 | |||
88 | &mul_add_c($a[0],$b[6],$c0,$c1,$c2); | ||
89 | &mul_add_c($a[1],$b[5],$c0,$c1,$c2); | ||
90 | &mul_add_c($a[2],$b[4],$c0,$c1,$c2); | ||
91 | &mul_add_c($a[3],$b[3],$c0,$c1,$c2); | ||
92 | &mul_add_c($a[4],$b[2],$c0,$c1,$c2); | ||
93 | &mul_add_c($a[5],$b[1],$c0,$c1,$c2); | ||
94 | &mul_add_c($a[6],$b[0],$c0,$c1,$c2); | ||
95 | &st($c0,&QWPw(6,$rp)); &FR($c0); ($c0)=&NR(1); | ||
96 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
97 | &mov("zero",$c2); | ||
98 | |||
99 | &mul_add_c($a[0],$b[7],$c0,$c1,$c2); &FR($a[0]); | ||
100 | &mul_add_c($a[1],$b[6],$c0,$c1,$c2); | ||
101 | &mul_add_c($a[2],$b[5],$c0,$c1,$c2); | ||
102 | &mul_add_c($a[3],$b[4],$c0,$c1,$c2); | ||
103 | &mul_add_c($a[4],$b[3],$c0,$c1,$c2); | ||
104 | &mul_add_c($a[5],$b[2],$c0,$c1,$c2); | ||
105 | &mul_add_c($a[6],$b[1],$c0,$c1,$c2); | ||
106 | &mul_add_c($a[7],$b[0],$c0,$c1,$c2); &FR($b[0]); | ||
107 | &st($c0,&QWPw(7,$rp)); &FR($c0); ($c0)=&NR(1); | ||
108 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
109 | &mov("zero",$c2); | ||
110 | |||
111 | &mul_add_c($a[1],$b[7],$c0,$c1,$c2); &FR($a[1]); | ||
112 | &mul_add_c($a[2],$b[6],$c0,$c1,$c2); | ||
113 | &mul_add_c($a[3],$b[5],$c0,$c1,$c2); | ||
114 | &mul_add_c($a[4],$b[4],$c0,$c1,$c2); | ||
115 | &mul_add_c($a[5],$b[3],$c0,$c1,$c2); | ||
116 | &mul_add_c($a[6],$b[2],$c0,$c1,$c2); | ||
117 | &mul_add_c($a[7],$b[1],$c0,$c1,$c2); &FR($b[1]); | ||
118 | &st($c0,&QWPw(8,$rp)); &FR($c0); ($c0)=&NR(1); | ||
119 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
120 | &mov("zero",$c2); | ||
121 | |||
122 | &mul_add_c($a[2],$b[7],$c0,$c1,$c2); &FR($a[2]); | ||
123 | &mul_add_c($a[3],$b[6],$c0,$c1,$c2); | ||
124 | &mul_add_c($a[4],$b[5],$c0,$c1,$c2); | ||
125 | &mul_add_c($a[5],$b[4],$c0,$c1,$c2); | ||
126 | &mul_add_c($a[6],$b[3],$c0,$c1,$c2); | ||
127 | &mul_add_c($a[7],$b[2],$c0,$c1,$c2); &FR($b[2]); | ||
128 | &st($c0,&QWPw(9,$rp)); &FR($c0); ($c0)=&NR(1); | ||
129 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
130 | &mov("zero",$c2); | ||
131 | |||
132 | &mul_add_c($a[3],$b[7],$c0,$c1,$c2); &FR($a[3]); | ||
133 | &mul_add_c($a[4],$b[6],$c0,$c1,$c2); | ||
134 | &mul_add_c($a[5],$b[5],$c0,$c1,$c2); | ||
135 | &mul_add_c($a[6],$b[4],$c0,$c1,$c2); | ||
136 | &mul_add_c($a[7],$b[3],$c0,$c1,$c2); &FR($b[3]); | ||
137 | &st($c0,&QWPw(10,$rp)); &FR($c0); ($c0)=&NR(1); | ||
138 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
139 | &mov("zero",$c2); | ||
140 | |||
141 | &mul_add_c($a[4],$b[7],$c0,$c1,$c2); &FR($a[4]); | ||
142 | &mul_add_c($a[5],$b[6],$c0,$c1,$c2); | ||
143 | &mul_add_c($a[6],$b[5],$c0,$c1,$c2); | ||
144 | &mul_add_c($a[7],$b[4],$c0,$c1,$c2); &FR($b[4]); | ||
145 | &st($c0,&QWPw(11,$rp)); &FR($c0); ($c0)=&NR(1); | ||
146 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
147 | &mov("zero",$c2); | ||
148 | |||
149 | &mul_add_c($a[5],$b[7],$c0,$c1,$c2); &FR($a[5]); | ||
150 | &mul_add_c($a[6],$b[6],$c0,$c1,$c2); | ||
151 | &mul_add_c($a[7],$b[5],$c0,$c1,$c2); &FR($b[5]); | ||
152 | &st($c0,&QWPw(12,$rp)); &FR($c0); ($c0)=&NR(1); | ||
153 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
154 | &mov("zero",$c2); | ||
155 | |||
156 | &mul_add_c($a[6],$b[7],$c0,$c1,$c2); &FR($a[6]); | ||
157 | &mul_add_c($a[7],$b[6],$c0,$c1,$c2); &FR($b[6]); | ||
158 | &st($c0,&QWPw(13,$rp)); &FR($c0); ($c0)=&NR(1); | ||
159 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
160 | &mov("zero",$c2); | ||
161 | |||
162 | &mul_add_c($a[7],$b[7],$c0,$c1,$c2); &FR($a[7],$b[7]); | ||
163 | &st($c0,&QWPw(14,$rp)); | ||
164 | &st($c1,&QWPw(15,$rp)); | ||
165 | |||
166 | &FR($c0,$c1,$c2); | ||
167 | |||
168 | &ld($reg_s0,&swtmp(0)); | ||
169 | &ld($reg_s1,&swtmp(1)); | ||
170 | &stack_pop(2); | ||
171 | |||
172 | &function_end($name); | ||
173 | |||
174 | &fin_pool; | ||
175 | } | ||
176 | |||
177 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sqr.pl b/src/lib/libcrypto/bn/asm/alpha.works/sqr.pl new file mode 100644 index 0000000000..a55b696906 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/sqr.pl | |||
@@ -0,0 +1,113 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_sqr_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r,$couny); | ||
8 | |||
9 | &init_pool(3); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $count=&wparam(2); | ||
15 | |||
16 | &function_begin($name,""); | ||
17 | |||
18 | &comment(""); | ||
19 | &sub($count,4,$count); | ||
20 | &mov("zero",$cc); | ||
21 | &br(&label("finish")); | ||
22 | &blt($count,&label("finish")); | ||
23 | |||
24 | ($a0,$r0)=&NR(2); | ||
25 | &ld($a0,&QWPw(0,$ap)); | ||
26 | &ld($r0,&QWPw(0,$rp)); | ||
27 | |||
28 | $a=<<'EOF'; | ||
29 | ########################################################## | ||
30 | &set_label("loop"); | ||
31 | |||
32 | ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); | ||
33 | ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp)); | ||
34 | ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); | ||
35 | ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp)); | ||
36 | ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); | ||
37 | ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp)); | ||
38 | |||
39 | ($o0,$t0)=&NR(2); | ||
40 | &add($a0,$b0,$o0); | ||
41 | &cmpult($o0,$b0,$t0); | ||
42 | &add($o0,$cc,$o0); | ||
43 | &cmpult($o0,$cc,$cc); | ||
44 | &add($cc,$t0,$cc); &FR($t0); | ||
45 | |||
46 | ($t1,$o1)=&NR(2); | ||
47 | |||
48 | &add($a1,$b1,$o1); &FR($a1); | ||
49 | &cmpult($o1,$b1,$t1); &FR($b1); | ||
50 | &add($o1,$cc,$o1); | ||
51 | &cmpult($o1,$cc,$cc); | ||
52 | &add($cc,$t1,$cc); &FR($t1); | ||
53 | |||
54 | ($t2,$o2)=&NR(2); | ||
55 | |||
56 | &add($a2,$b2,$o2); &FR($a2); | ||
57 | &cmpult($o2,$b2,$t2); &FR($b2); | ||
58 | &add($o2,$cc,$o2); | ||
59 | &cmpult($o2,$cc,$cc); | ||
60 | &add($cc,$t2,$cc); &FR($t2); | ||
61 | |||
62 | ($t3,$o3)=&NR(2); | ||
63 | |||
64 | &add($a3,$b3,$o3); &FR($a3); | ||
65 | &cmpult($o3,$b3,$t3); &FR($b3); | ||
66 | &add($o3,$cc,$o3); | ||
67 | &cmpult($o3,$cc,$cc); | ||
68 | &add($cc,$t3,$cc); &FR($t3); | ||
69 | |||
70 | &st($o0,&QWPw(0,$rp)); &FR($o0); | ||
71 | &st($o1,&QWPw(0,$rp)); &FR($o1); | ||
72 | &st($o2,&QWPw(0,$rp)); &FR($o2); | ||
73 | &st($o3,&QWPw(0,$rp)); &FR($o3); | ||
74 | |||
75 | &sub($count,4,$count); # count-=4 | ||
76 | &add($ap,4*$QWS,$ap); # count+=4 | ||
77 | &add($bp,4*$QWS,$bp); # count+=4 | ||
78 | &add($rp,4*$QWS,$rp); # count+=4 | ||
79 | |||
80 | &blt($count,&label("finish")); | ||
81 | &ld($a0,&QWPw(0,$ap)); | ||
82 | &ld($b0,&QWPw(0,$bp)); | ||
83 | &br(&label("loop")); | ||
84 | EOF | ||
85 | ################################################## | ||
86 | # Do the last 0..3 words | ||
87 | |||
88 | &set_label("last_loop"); | ||
89 | |||
90 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a | ||
91 | &mul($a0,$a0,($l0)=&NR(1)); | ||
92 | &add($ap,$QWS,$ap); | ||
93 | &add($rp,2*$QWS,$rp); | ||
94 | &sub($count,1,$count); | ||
95 | &muh($a0,$a0,($h0)=&NR(1)); &FR($a0); | ||
96 | &st($l0,&QWPw(-2,$rp)); &FR($l0); | ||
97 | &st($h0,&QWPw(-1,$rp)); &FR($h0); | ||
98 | |||
99 | &bgt($count,&label("last_loop")); | ||
100 | &function_end_A($name); | ||
101 | |||
102 | ###################################################### | ||
103 | &set_label("finish"); | ||
104 | &add($count,4,$count); | ||
105 | &bgt($count,&label("last_loop")); | ||
106 | |||
107 | &set_label("end"); | ||
108 | &function_end($name); | ||
109 | |||
110 | &fin_pool; | ||
111 | } | ||
112 | |||
113 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl new file mode 100644 index 0000000000..bf33f5b503 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl | |||
@@ -0,0 +1,109 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub sqr_add_c | ||
5 | { | ||
6 | local($a,$c0,$c1,$c2)=@_; | ||
7 | local($l1,$h1,$t1,$t2); | ||
8 | |||
9 | &mul($a,$a,($l1)=&NR(1)); | ||
10 | &muh($a,$a,($h1)=&NR(1)); | ||
11 | &add($c0,$l1,$c0); | ||
12 | &add($c1,$h1,$c1); | ||
13 | &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); | ||
14 | &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); | ||
15 | &add($c1,$t1,$c1); &FR($t1); | ||
16 | &add($c2,$t2,$c2); &FR($t2); | ||
17 | } | ||
18 | |||
19 | sub sqr_add_c2 | ||
20 | { | ||
21 | local($a,$b,$c0,$c1,$c2)=@_; | ||
22 | local($l1,$h1,$t1,$t2); | ||
23 | |||
24 | &mul($a,$b,($l1)=&NR(1)); | ||
25 | &muh($a,$b,($h1)=&NR(1)); | ||
26 | &cmplt($l1,"zero",($lc1)=&NR(1)); | ||
27 | &cmplt($h1,"zero",($hc1)=&NR(1)); | ||
28 | &add($l1,$l1,$l1); | ||
29 | &add($h1,$h1,$h1); | ||
30 | &add($h1,$lc1,$h1); &FR($lc1); | ||
31 | &add($c2,$hc1,$c2); &FR($hc1); | ||
32 | |||
33 | &add($c0,$l1,$c0); | ||
34 | &add($c1,$h1,$c1); | ||
35 | &cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1); | ||
36 | &cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1); | ||
37 | |||
38 | &add($c1,$lc1,$c1); &FR($lc1); | ||
39 | &add($c2,$hc1,$c2); &FR($hc1); | ||
40 | } | ||
41 | |||
42 | |||
43 | sub bn_sqr_comba4 | ||
44 | { | ||
45 | local($name)=@_; | ||
46 | local(@a,@b,$r,$c0,$c1,$c2); | ||
47 | |||
48 | $cnt=1; | ||
49 | &init_pool(2); | ||
50 | |||
51 | $rp=&wparam(0); | ||
52 | $ap=&wparam(1); | ||
53 | |||
54 | &function_begin($name,""); | ||
55 | |||
56 | &comment(""); | ||
57 | |||
58 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
59 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
60 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
61 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap); | ||
62 | |||
63 | ($c0,$c1,$c2)=&NR(3); | ||
64 | |||
65 | &mov("zero",$c2); | ||
66 | &mul($a[0],$a[0],$c0); | ||
67 | &muh($a[0],$a[0],$c1); | ||
68 | &st($c0,&QWPw(0,$rp)); | ||
69 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
70 | &mov("zero",$c2); | ||
71 | |||
72 | &sqr_add_c2($a[0],$a[1],$c0,$c1,$c2); | ||
73 | &st($c0,&QWPw(1,$rp)); | ||
74 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
75 | &mov("zero",$c2); | ||
76 | |||
77 | &sqr_add_c($a[1],$c0,$c1,$c2); | ||
78 | &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2); | ||
79 | &st($c0,&QWPw(2,$rp)); | ||
80 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
81 | &mov("zero",$c2); | ||
82 | |||
83 | &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2); | ||
84 | &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2); | ||
85 | &st($c0,&QWPw(3,$rp)); | ||
86 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
87 | &mov("zero",$c2); | ||
88 | |||
89 | &sqr_add_c($a[2],$c0,$c1,$c2); | ||
90 | &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2); | ||
91 | &st($c0,&QWPw(4,$rp)); | ||
92 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
93 | &mov("zero",$c2); | ||
94 | |||
95 | &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2); | ||
96 | &st($c0,&QWPw(5,$rp)); | ||
97 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
98 | &mov("zero",$c2); | ||
99 | |||
100 | &sqr_add_c($a[3],$c0,$c1,$c2); | ||
101 | &st($c0,&QWPw(6,$rp)); | ||
102 | &st($c1,&QWPw(7,$rp)); | ||
103 | |||
104 | &function_end($name); | ||
105 | |||
106 | &fin_pool; | ||
107 | } | ||
108 | |||
109 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl new file mode 100644 index 0000000000..b4afe085f1 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl | |||
@@ -0,0 +1,132 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_sqr_comba8 | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local(@a,@b,$r,$c0,$c1,$c2); | ||
8 | |||
9 | $cnt=1; | ||
10 | &init_pool(2); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | |||
15 | &function_begin($name,""); | ||
16 | |||
17 | &comment(""); | ||
18 | |||
19 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
20 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
21 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
22 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); | ||
23 | &ld(($a[4])=&NR(1),&QWPw(4,$ap)); | ||
24 | &ld(($a[5])=&NR(1),&QWPw(5,$ap)); | ||
25 | &ld(($a[6])=&NR(1),&QWPw(6,$ap)); | ||
26 | &ld(($a[7])=&NR(1),&QWPw(7,$ap)); &FR($ap); | ||
27 | |||
28 | ($c0,$c1,$c2)=&NR(3); | ||
29 | |||
30 | &mov("zero",$c2); | ||
31 | &mul($a[0],$a[0],$c0); | ||
32 | &muh($a[0],$a[0],$c1); | ||
33 | &st($c0,&QWPw(0,$rp)); | ||
34 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
35 | &mov("zero",$c2); | ||
36 | |||
37 | &sqr_add_c2($a[1],$a[0],$c0,$c1,$c2); | ||
38 | &st($c0,&QWPw(1,$rp)); | ||
39 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
40 | &mov("zero",$c2); | ||
41 | |||
42 | &sqr_add_c($a[1],$c0,$c1,$c2); | ||
43 | &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2); | ||
44 | &st($c0,&QWPw(2,$rp)); | ||
45 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
46 | &mov("zero",$c2); | ||
47 | |||
48 | &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2); | ||
49 | &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2); | ||
50 | &st($c0,&QWPw(3,$rp)); | ||
51 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
52 | &mov("zero",$c2); | ||
53 | |||
54 | &sqr_add_c($a[2],$c0,$c1,$c2); | ||
55 | &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2); | ||
56 | &sqr_add_c2($a[4],$a[0],$c0,$c1,$c2); | ||
57 | &st($c0,&QWPw(4,$rp)); | ||
58 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
59 | &mov("zero",$c2); | ||
60 | |||
61 | &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2); | ||
62 | &sqr_add_c2($a[4],$a[1],$c0,$c1,$c2); | ||
63 | &sqr_add_c2($a[5],$a[0],$c0,$c1,$c2); | ||
64 | &st($c0,&QWPw(5,$rp)); | ||
65 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
66 | &mov("zero",$c2); | ||
67 | |||
68 | &sqr_add_c($a[3],$c0,$c1,$c2); | ||
69 | &sqr_add_c2($a[4],$a[2],$c0,$c1,$c2); | ||
70 | &sqr_add_c2($a[5],$a[1],$c0,$c1,$c2); | ||
71 | &sqr_add_c2($a[6],$a[0],$c0,$c1,$c2); | ||
72 | &st($c0,&QWPw(6,$rp)); | ||
73 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
74 | &mov("zero",$c2); | ||
75 | |||
76 | &sqr_add_c2($a[4],$a[3],$c0,$c1,$c2); | ||
77 | &sqr_add_c2($a[5],$a[2],$c0,$c1,$c2); | ||
78 | &sqr_add_c2($a[6],$a[1],$c0,$c1,$c2); | ||
79 | &sqr_add_c2($a[7],$a[0],$c0,$c1,$c2); | ||
80 | &st($c0,&QWPw(7,$rp)); | ||
81 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
82 | &mov("zero",$c2); | ||
83 | |||
84 | &sqr_add_c($a[4],$c0,$c1,$c2); | ||
85 | &sqr_add_c2($a[5],$a[3],$c0,$c1,$c2); | ||
86 | &sqr_add_c2($a[6],$a[2],$c0,$c1,$c2); | ||
87 | &sqr_add_c2($a[7],$a[1],$c0,$c1,$c2); | ||
88 | &st($c0,&QWPw(8,$rp)); | ||
89 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
90 | &mov("zero",$c2); | ||
91 | |||
92 | &sqr_add_c2($a[5],$a[4],$c0,$c1,$c2); | ||
93 | &sqr_add_c2($a[6],$a[3],$c0,$c1,$c2); | ||
94 | &sqr_add_c2($a[7],$a[2],$c0,$c1,$c2); | ||
95 | &st($c0,&QWPw(9,$rp)); | ||
96 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
97 | &mov("zero",$c2); | ||
98 | |||
99 | &sqr_add_c($a[5],$c0,$c1,$c2); | ||
100 | &sqr_add_c2($a[6],$a[4],$c0,$c1,$c2); | ||
101 | &sqr_add_c2($a[7],$a[3],$c0,$c1,$c2); | ||
102 | &st($c0,&QWPw(10,$rp)); | ||
103 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
104 | &mov("zero",$c2); | ||
105 | |||
106 | &sqr_add_c2($a[6],$a[5],$c0,$c1,$c2); | ||
107 | &sqr_add_c2($a[7],$a[4],$c0,$c1,$c2); | ||
108 | &st($c0,&QWPw(11,$rp)); | ||
109 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
110 | &mov("zero",$c2); | ||
111 | |||
112 | &sqr_add_c($a[6],$c0,$c1,$c2); | ||
113 | &sqr_add_c2($a[7],$a[5],$c0,$c1,$c2); | ||
114 | &st($c0,&QWPw(12,$rp)); | ||
115 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
116 | &mov("zero",$c2); | ||
117 | |||
118 | &sqr_add_c2($a[7],$a[6],$c0,$c1,$c2); | ||
119 | &st($c0,&QWPw(13,$rp)); | ||
120 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
121 | &mov("zero",$c2); | ||
122 | |||
123 | &sqr_add_c($a[7],$c0,$c1,$c2); | ||
124 | &st($c0,&QWPw(14,$rp)); | ||
125 | &st($c1,&QWPw(15,$rp)); | ||
126 | |||
127 | &function_end($name); | ||
128 | |||
129 | &fin_pool; | ||
130 | } | ||
131 | |||
132 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sub.pl b/src/lib/libcrypto/bn/asm/alpha.works/sub.pl new file mode 100644 index 0000000000..d998da5c21 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.works/sub.pl | |||
@@ -0,0 +1,108 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_sub_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $bp=&wparam(2); | ||
15 | $count=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | &blt($count,&label("finish")); | ||
23 | |||
24 | ($a0,$b0)=&NR(2); | ||
25 | &ld($a0,&QWPw(0,$ap)); | ||
26 | &ld($b0,&QWPw(0,$bp)); | ||
27 | |||
28 | ########################################################## | ||
29 | &set_label("loop"); | ||
30 | |||
31 | ($a1,$tmp,$b1,$a2,$b2,$a3,$b3,$o0)=&NR(8); | ||
32 | &ld($a1,&QWPw(1,$ap)); | ||
33 | &cmpult($a0,$b0,$tmp); # will we borrow? | ||
34 | &ld($b1,&QWPw(1,$bp)); | ||
35 | &sub($a0,$b0,$a0); # do the subtract | ||
36 | &ld($a2,&QWPw(2,$ap)); | ||
37 | &cmpult($a0,$cc,$b0); # will we borrow? | ||
38 | &ld($b2,&QWPw(2,$bp)); | ||
39 | &sub($a0,$cc,$o0); # will we borrow? | ||
40 | &ld($a3,&QWPw(3,$ap)); | ||
41 | &add($b0,$tmp,$cc); ($t1,$o1)=&NR(2); &FR($tmp); | ||
42 | |||
43 | &cmpult($a1,$b1,$t1); # will we borrow? | ||
44 | &sub($a1,$b1,$a1); # do the subtract | ||
45 | &ld($b3,&QWPw(3,$bp)); | ||
46 | &cmpult($a1,$cc,$b1); # will we borrow? | ||
47 | &sub($a1,$cc,$o1); # will we borrow? | ||
48 | &add($b1,$t1,$cc); ($tmp,$o2)=&NR(2); &FR($t1,$a1,$b1); | ||
49 | |||
50 | &cmpult($a2,$b2,$tmp); # will we borrow? | ||
51 | &sub($a2,$b2,$a2); # do the subtract | ||
52 | &st($o0,&QWPw(0,$rp)); &FR($o0); # save | ||
53 | &cmpult($a2,$cc,$b2); # will we borrow? | ||
54 | &sub($a2,$cc,$o2); # will we borrow? | ||
55 | &add($b2,$tmp,$cc); ($t3,$o3)=&NR(2); &FR($tmp,$a2,$b2); | ||
56 | |||
57 | &cmpult($a3,$b3,$t3); # will we borrow? | ||
58 | &sub($a3,$b3,$a3); # do the subtract | ||
59 | &st($o1,&QWPw(1,$rp)); &FR($o1); | ||
60 | &cmpult($a3,$cc,$b3); # will we borrow? | ||
61 | &sub($a3,$cc,$o3); # will we borrow? | ||
62 | &add($b3,$t3,$cc); &FR($t3,$a3,$b3); | ||
63 | |||
64 | &st($o2,&QWPw(2,$rp)); &FR($o2); | ||
65 | &sub($count,4,$count); # count-=4 | ||
66 | &st($o3,&QWPw(3,$rp)); &FR($o3); | ||
67 | &add($ap,4*$QWS,$ap); # count+=4 | ||
68 | &add($bp,4*$QWS,$bp); # count+=4 | ||
69 | &add($rp,4*$QWS,$rp); # count+=4 | ||
70 | |||
71 | &blt($count,&label("finish")); | ||
72 | &ld($a0,&QWPw(0,$ap)); | ||
73 | &ld($b0,&QWPw(0,$bp)); | ||
74 | &br(&label("loop")); | ||
75 | ################################################## | ||
76 | # Do the last 0..3 words | ||
77 | |||
78 | &set_label("last_loop"); | ||
79 | |||
80 | &ld($a0,&QWPw(0,$ap)); # get a | ||
81 | &ld($b0,&QWPw(0,$bp)); # get b | ||
82 | &cmpult($a0,$b0,$tmp); # will we borrow? | ||
83 | &sub($a0,$b0,$a0); # do the subtract | ||
84 | &cmpult($a0,$cc,$b0); # will we borrow? | ||
85 | &sub($a0,$cc,$a0); # will we borrow? | ||
86 | &st($a0,&QWPw(0,$rp)); # save | ||
87 | &add($b0,$tmp,$cc); # add the borrows | ||
88 | |||
89 | &add($ap,$QWS,$ap); | ||
90 | &add($bp,$QWS,$bp); | ||
91 | &add($rp,$QWS,$rp); | ||
92 | &sub($count,1,$count); | ||
93 | &bgt($count,&label("last_loop")); | ||
94 | &function_end_A($name); | ||
95 | |||
96 | ###################################################### | ||
97 | &set_label("finish"); | ||
98 | &add($count,4,$count); | ||
99 | &bgt($count,&label("last_loop")); | ||
100 | |||
101 | &FR($a0,$b0); | ||
102 | &set_label("end"); | ||
103 | &function_end($name); | ||
104 | |||
105 | &fin_pool; | ||
106 | } | ||
107 | |||
108 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/add.pl b/src/lib/libcrypto/bn/asm/alpha/add.pl new file mode 100644 index 0000000000..13bf516428 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/add.pl | |||
@@ -0,0 +1,118 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_add_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $bp=&wparam(2); | ||
15 | $count=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | &blt($count,&label("finish")); | ||
23 | |||
24 | ($a0,$b0)=&NR(2); | ||
25 | |||
26 | ########################################################## | ||
27 | &set_label("loop"); | ||
28 | |||
29 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); | ||
30 | &ld(($b0)=&NR(1),&QWPw(0,$bp)); | ||
31 | &ld(($a1)=&NR(1),&QWPw(1,$ap)); | ||
32 | &ld(($b1)=&NR(1),&QWPw(1,$bp)); | ||
33 | |||
34 | ($o0,$t0)=&NR(2); | ||
35 | &add($a0,$b0,$o0); | ||
36 | &ld(($a2)=&NR(1),&QWPw(2,$ap)); | ||
37 | &cmpult($o0,$b0,$t0); | ||
38 | &add($o0,$cc,$o0); | ||
39 | &cmpult($o0,$cc,$cc); | ||
40 | &ld(($b2)=&NR(1),&QWPw(2,$bp)); | ||
41 | &add($cc,$t0,$cc); &FR($t0); | ||
42 | |||
43 | ($t1,$o1)=&NR(2); | ||
44 | |||
45 | &add($a1,$b1,$o1); &FR($a1); | ||
46 | &cmpult($o1,$b1,$t1); &FR($b1); | ||
47 | &add($o1,$cc,$o1); | ||
48 | &cmpult($o1,$cc,$cc); | ||
49 | &ld(($a3)=&NR(1),&QWPw(3,$ap)); | ||
50 | &add($cc,$t1,$cc); &FR($t1); | ||
51 | |||
52 | ($t2,$o2)=&NR(2); | ||
53 | |||
54 | &add($a2,$b2,$o2); &FR($a2); | ||
55 | &cmpult($o2,$b2,$t2); &FR($b2); | ||
56 | &add($o2,$cc,$o2); | ||
57 | &cmpult($o2,$cc,$cc); | ||
58 | &ld(($b3)=&NR(1),&QWPw(3,$bp)); | ||
59 | &st($o0,&QWPw(0,$rp)); &FR($o0); | ||
60 | &add($cc,$t2,$cc); &FR($t2); | ||
61 | |||
62 | ($t3,$o3)=&NR(2); | ||
63 | |||
64 | &st($o1,&QWPw(0,$rp)); &FR($o1); | ||
65 | &add($a3,$b3,$o3); &FR($a3); | ||
66 | &cmpult($o3,$b3,$t3); &FR($b3); | ||
67 | &add($o3,$cc,$o3); | ||
68 | &st($o2,&QWPw(0,$rp)); &FR($o2); | ||
69 | &cmpult($o3,$cc,$cc); | ||
70 | &st($o3,&QWPw(0,$rp)); &FR($o3); | ||
71 | &add($cc,$t3,$cc); &FR($t3); | ||
72 | |||
73 | |||
74 | &sub($count,4,$count); # count-=4 | ||
75 | &add($ap,4*$QWS,$ap); # count+=4 | ||
76 | &add($bp,4*$QWS,$bp); # count+=4 | ||
77 | &add($rp,4*$QWS,$rp); # count+=4 | ||
78 | |||
79 | ### | ||
80 | &bge($count,&label("loop")); | ||
81 | ### | ||
82 | &br(&label("finish")); | ||
83 | ################################################## | ||
84 | # Do the last 0..3 words | ||
85 | |||
86 | ($t0,$o0)=&NR(2); | ||
87 | &set_label("last_loop"); | ||
88 | |||
89 | &ld($a0,&QWPw(0,$ap)); # get a | ||
90 | &ld($b0,&QWPw(0,$bp)); # get b | ||
91 | &add($ap,$QWS,$ap); | ||
92 | &add($bp,$QWS,$bp); | ||
93 | &add($a0,$b0,$o0); | ||
94 | &sub($count,1,$count); | ||
95 | &cmpult($o0,$b0,$t0); # will we borrow? | ||
96 | &add($o0,$cc,$o0); # will we borrow? | ||
97 | &cmpult($o0,$cc,$cc); # will we borrow? | ||
98 | &add($rp,$QWS,$rp); | ||
99 | &st($o0,&QWPw(-1,$rp)); # save | ||
100 | &add($cc,$t0,$cc); # add the borrows | ||
101 | |||
102 | ### | ||
103 | &bgt($count,&label("last_loop")); | ||
104 | &function_end_A($name); | ||
105 | |||
106 | ###################################################### | ||
107 | &set_label("finish"); | ||
108 | &add($count,4,$count); | ||
109 | &bgt($count,&label("last_loop")); | ||
110 | |||
111 | &FR($o0,$t0,$a0,$b0); | ||
112 | &set_label("end"); | ||
113 | &function_end($name); | ||
114 | |||
115 | &fin_pool; | ||
116 | } | ||
117 | |||
118 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/div.pl b/src/lib/libcrypto/bn/asm/alpha/div.pl new file mode 100644 index 0000000000..e9e680897a --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/div.pl | |||
@@ -0,0 +1,144 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | |||
3 | sub bn_div_words | ||
4 | { | ||
5 | local($data)=<<'EOF'; | ||
6 | # | ||
7 | # What follows was taken directly from the C compiler with a few | ||
8 | # hacks to redo the lables. | ||
9 | # | ||
10 | .text | ||
11 | .set noreorder | ||
12 | .set volatile | ||
13 | .align 3 | ||
14 | .globl bn_div_words | ||
15 | .ent bn_div_words | ||
16 | bn_div_words | ||
17 | ldgp $29,0($27) | ||
18 | bn_div_words.ng: | ||
19 | lda $30,-48($30) | ||
20 | .frame $30,48,$26,0 | ||
21 | stq $26,0($30) | ||
22 | stq $9,8($30) | ||
23 | stq $10,16($30) | ||
24 | stq $11,24($30) | ||
25 | stq $12,32($30) | ||
26 | stq $13,40($30) | ||
27 | .mask 0x4003e00,-48 | ||
28 | .prologue 1 | ||
29 | bis $16,$16,$9 | ||
30 | bis $17,$17,$10 | ||
31 | bis $18,$18,$11 | ||
32 | bis $31,$31,$13 | ||
33 | bis $31,2,$12 | ||
34 | bne $11,$9119 | ||
35 | lda $0,-1 | ||
36 | br $31,$9136 | ||
37 | .align 4 | ||
38 | $9119: | ||
39 | bis $11,$11,$16 | ||
40 | jsr $26,BN_num_bits_word | ||
41 | ldgp $29,0($26) | ||
42 | subq $0,64,$1 | ||
43 | beq $1,$9120 | ||
44 | bis $31,1,$1 | ||
45 | sll $1,$0,$1 | ||
46 | cmpule $9,$1,$1 | ||
47 | bne $1,$9120 | ||
48 | # lda $16,_IO_stderr_ | ||
49 | # lda $17,$C32 | ||
50 | # bis $0,$0,$18 | ||
51 | # jsr $26,fprintf | ||
52 | # ldgp $29,0($26) | ||
53 | jsr $26,abort | ||
54 | ldgp $29,0($26) | ||
55 | .align 4 | ||
56 | $9120: | ||
57 | bis $31,64,$3 | ||
58 | cmpult $9,$11,$2 | ||
59 | subq $3,$0,$1 | ||
60 | addl $1,$31,$0 | ||
61 | subq $9,$11,$1 | ||
62 | cmoveq $2,$1,$9 | ||
63 | beq $0,$9122 | ||
64 | zapnot $0,15,$2 | ||
65 | subq $3,$0,$1 | ||
66 | sll $11,$2,$11 | ||
67 | sll $9,$2,$3 | ||
68 | srl $10,$1,$1 | ||
69 | sll $10,$2,$10 | ||
70 | bis $3,$1,$9 | ||
71 | $9122: | ||
72 | srl $11,32,$5 | ||
73 | zapnot $11,15,$6 | ||
74 | lda $7,-1 | ||
75 | .align 5 | ||
76 | $9123: | ||
77 | srl $9,32,$1 | ||
78 | subq $1,$5,$1 | ||
79 | bne $1,$9126 | ||
80 | zapnot $7,15,$27 | ||
81 | br $31,$9127 | ||
82 | .align 4 | ||
83 | $9126: | ||
84 | bis $9,$9,$24 | ||
85 | bis $5,$5,$25 | ||
86 | divqu $24,$25,$27 | ||
87 | $9127: | ||
88 | srl $10,32,$4 | ||
89 | .align 5 | ||
90 | $9128: | ||
91 | mulq $27,$5,$1 | ||
92 | subq $9,$1,$3 | ||
93 | zapnot $3,240,$1 | ||
94 | bne $1,$9129 | ||
95 | mulq $6,$27,$2 | ||
96 | sll $3,32,$1 | ||
97 | addq $1,$4,$1 | ||
98 | cmpule $2,$1,$2 | ||
99 | bne $2,$9129 | ||
100 | subq $27,1,$27 | ||
101 | br $31,$9128 | ||
102 | .align 4 | ||
103 | $9129: | ||
104 | mulq $27,$6,$1 | ||
105 | mulq $27,$5,$4 | ||
106 | srl $1,32,$3 | ||
107 | sll $1,32,$1 | ||
108 | addq $4,$3,$4 | ||
109 | cmpult $10,$1,$2 | ||
110 | subq $10,$1,$10 | ||
111 | addq $2,$4,$2 | ||
112 | cmpult $9,$2,$1 | ||
113 | bis $2,$2,$4 | ||
114 | beq $1,$9134 | ||
115 | addq $9,$11,$9 | ||
116 | subq $27,1,$27 | ||
117 | $9134: | ||
118 | subl $12,1,$12 | ||
119 | subq $9,$4,$9 | ||
120 | beq $12,$9124 | ||
121 | sll $27,32,$13 | ||
122 | sll $9,32,$2 | ||
123 | srl $10,32,$1 | ||
124 | sll $10,32,$10 | ||
125 | bis $2,$1,$9 | ||
126 | br $31,$9123 | ||
127 | .align 4 | ||
128 | $9124: | ||
129 | bis $13,$27,$0 | ||
130 | $9136: | ||
131 | ldq $26,0($30) | ||
132 | ldq $9,8($30) | ||
133 | ldq $10,16($30) | ||
134 | ldq $11,24($30) | ||
135 | ldq $12,32($30) | ||
136 | ldq $13,40($30) | ||
137 | addq $30,48,$30 | ||
138 | ret $31,($26),1 | ||
139 | .end bn_div_words | ||
140 | EOF | ||
141 | &asm_add($data); | ||
142 | } | ||
143 | |||
144 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul.pl b/src/lib/libcrypto/bn/asm/alpha/mul.pl new file mode 100644 index 0000000000..76c926566c --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/mul.pl | |||
@@ -0,0 +1,104 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_mul_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r,$couny); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $count=&wparam(2); | ||
15 | $word=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | ### | ||
23 | &blt($count,&label("finish")); | ||
24 | |||
25 | ($a0)=&NR(1); &ld($a0,&QWPw(0,$ap)); | ||
26 | |||
27 | &set_label("loop"); | ||
28 | |||
29 | ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); | ||
30 | ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); | ||
31 | |||
32 | &muh($a0,$word,($h0)=&NR(1)); &FR($a0); | ||
33 | ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); | ||
34 | ### wait 8 | ||
35 | &mul($a0,$word,($l0)=&NR(1)); &FR($a0); | ||
36 | ### wait 8 | ||
37 | &muh($a1,$word,($h1)=&NR(1)); &FR($a1); | ||
38 | &add($l0,$cc,$l0); ### wait 8 | ||
39 | &mul($a1,$word,($l1)=&NR(1)); &FR($a1); | ||
40 | &cmpult($l0,$cc,$cc); ### wait 8 | ||
41 | &muh($a2,$word,($h2)=&NR(1)); &FR($a2); | ||
42 | &add($h0,$cc,$cc); &FR($h0); ### wait 8 | ||
43 | &mul($a2,$word,($l2)=&NR(1)); &FR($a2); | ||
44 | &add($l1,$cc,$l1); ### wait 8 | ||
45 | &st($l0,&QWPw(0,$rp)); &FR($l0); | ||
46 | &cmpult($l1,$cc,$cc); ### wait 8 | ||
47 | &muh($a3,$word,($h3)=&NR(1)); &FR($a3); | ||
48 | &add($h1,$cc,$cc); &FR($h1); | ||
49 | &mul($a3,$word,($l3)=&NR(1)); &FR($a3); | ||
50 | &add($l2,$cc,$l2); | ||
51 | &st($l1,&QWPw(1,$rp)); &FR($l1); | ||
52 | &cmpult($l2,$cc,$cc); | ||
53 | &add($h2,$cc,$cc); &FR($h2); | ||
54 | &sub($count,4,$count); # count-=4 | ||
55 | &st($l2,&QWPw(2,$rp)); &FR($l2); | ||
56 | &add($l3,$cc,$l3); | ||
57 | &cmpult($l3,$cc,$cc); | ||
58 | &add($bp,4*$QWS,$bp); # count+=4 | ||
59 | &add($h3,$cc,$cc); &FR($h3); | ||
60 | &add($ap,4*$QWS,$ap); # count+=4 | ||
61 | &st($l3,&QWPw(3,$rp)); &FR($l3); | ||
62 | &add($rp,4*$QWS,$rp); # count+=4 | ||
63 | ### | ||
64 | &blt($count,&label("finish")); | ||
65 | ($a0)=&NR(1); &ld($a0,&QWPw(0,$ap)); | ||
66 | &br(&label("finish")); | ||
67 | ################################################## | ||
68 | |||
69 | ################################################## | ||
70 | # Do the last 0..3 words | ||
71 | |||
72 | &set_label("last_loop"); | ||
73 | |||
74 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a | ||
75 | ### | ||
76 | ### | ||
77 | ### | ||
78 | &muh($a0,$word,($h0)=&NR(1)); | ||
79 | ### Wait 8 for next mul issue | ||
80 | &mul($a0,$word,($l0)=&NR(1)); &FR($a0) | ||
81 | &add($ap,$QWS,$ap); | ||
82 | ### Loose 12 until result is available | ||
83 | &add($rp,$QWS,$rp); | ||
84 | &sub($count,1,$count); | ||
85 | &add($l0,$cc,$l0); | ||
86 | ### | ||
87 | &st($l0,&QWPw(-1,$rp)); &FR($l0); | ||
88 | &cmpult($l0,$cc,$cc); | ||
89 | &add($h0,$cc,$cc); &FR($h0); | ||
90 | &bgt($count,&label("last_loop")); | ||
91 | &function_end_A($name); | ||
92 | |||
93 | ###################################################### | ||
94 | &set_label("finish"); | ||
95 | &add($count,4,$count); | ||
96 | &bgt($count,&label("last_loop")); | ||
97 | |||
98 | &set_label("end"); | ||
99 | &function_end($name); | ||
100 | |||
101 | &fin_pool; | ||
102 | } | ||
103 | |||
104 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_add.pl b/src/lib/libcrypto/bn/asm/alpha/mul_add.pl new file mode 100644 index 0000000000..0d6df69bc4 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/mul_add.pl | |||
@@ -0,0 +1,123 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_mul_add_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r,$couny); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $count=&wparam(2); | ||
15 | $word=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | ### | ||
23 | &blt($count,&label("finish")); | ||
24 | |||
25 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); | ||
26 | |||
27 | $a=<<'EOF'; | ||
28 | ########################################################## | ||
29 | &set_label("loop"); | ||
30 | |||
31 | &ld(($r0)=&NR(1),&QWPw(0,$rp)); | ||
32 | &ld(($a1)=&NR(1),&QWPw(1,$ap)); | ||
33 | &muh($a0,$word,($h0)=&NR(1)); | ||
34 | &ld(($r1)=&NR(1),&QWPw(1,$rp)); | ||
35 | &ld(($a2)=&NR(1),&QWPw(2,$ap)); | ||
36 | ### | ||
37 | &mul($a0,$word,($l0)=&NR(1)); &FR($a0); | ||
38 | &ld(($r2)=&NR(1),&QWPw(2,$rp)); | ||
39 | &muh($a1,$word,($h1)=&NR(1)); | ||
40 | &ld(($a3)=&NR(1),&QWPw(3,$ap)); | ||
41 | &mul($a1,$word,($l1)=&NR(1)); &FR($a1); | ||
42 | &ld(($r3)=&NR(1),&QWPw(3,$rp)); | ||
43 | &add($r0,$l0,$r0); | ||
44 | &add($r1,$l1,$r1); | ||
45 | &cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0); | ||
46 | &cmpult($r1,$l1,($t1)=&NR(1)); &FR($l1); | ||
47 | &muh($a2,$word,($h2)=&NR(1)); | ||
48 | &add($r0,$cc,$r0); | ||
49 | &add($h0,$t0,$h0); &FR($t0); | ||
50 | &cmpult($r0,$cc,$cc); | ||
51 | &add($h1,$t1,$h1); &FR($t1); | ||
52 | &add($h0,$cc,$cc); &FR($h0); | ||
53 | &mul($a2,$word,($l2)=&NR(1)); &FR($a2); | ||
54 | &add($r1,$cc,$r1); | ||
55 | &cmpult($r1,$cc,$cc); | ||
56 | &add($r2,$l2,$r2); | ||
57 | &add($h1,$cc,$cc); &FR($h1); | ||
58 | &cmpult($r2,$l2,($t2)=&NR(1)); &FR($l2); | ||
59 | &muh($a3,$word,($h3)=&NR(1)); | ||
60 | &add($r2,$cc,$r2); | ||
61 | &st($r0,&QWPw(0,$rp)); &FR($r0); | ||
62 | &add($h2,$t2,$h2); &FR($t2); | ||
63 | &st($r1,&QWPw(1,$rp)); &FR($r1); | ||
64 | &cmpult($r2,$cc,$cc); | ||
65 | &mul($a3,$word,($l3)=&NR(1)); &FR($a3); | ||
66 | &add($h2,$cc,$cc); &FR($h2); | ||
67 | &st($r2,&QWPw(2,$rp)); &FR($r2); | ||
68 | &sub($count,4,$count); # count-=4 | ||
69 | &add($rp,4*$QWS,$rp); # count+=4 | ||
70 | &add($r3,$l3,$r3); | ||
71 | &add($ap,4*$QWS,$ap); # count+=4 | ||
72 | &cmpult($r3,$l3,($t3)=&NR(1)); &FR($l3); | ||
73 | &add($r3,$cc,$r3); | ||
74 | &add($h3,$t3,$h3); &FR($t3); | ||
75 | &cmpult($r3,$cc,$cc); | ||
76 | &st($r3,&QWPw(-1,$rp)); &FR($r3); | ||
77 | &add($h3,$cc,$cc); &FR($h3); | ||
78 | |||
79 | ### | ||
80 | &blt($count,&label("finish")); | ||
81 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); | ||
82 | &br(&label("loop")); | ||
83 | EOF | ||
84 | ################################################## | ||
85 | # Do the last 0..3 words | ||
86 | |||
87 | &set_label("last_loop"); | ||
88 | |||
89 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a | ||
90 | &ld(($r0)=&NR(1),&QWPw(0,$rp)); # get b | ||
91 | ### | ||
92 | ### | ||
93 | &muh($a0,$word,($h0)=&NR(1)); &FR($a0); | ||
94 | ### wait 8 | ||
95 | &mul($a0,$word,($l0)=&NR(1)); &FR($a0); | ||
96 | &add($rp,$QWS,$rp); | ||
97 | &add($ap,$QWS,$ap); | ||
98 | &sub($count,1,$count); | ||
99 | ### wait 3 until l0 is available | ||
100 | &add($r0,$l0,$r0); | ||
101 | ### | ||
102 | &cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0); | ||
103 | &add($r0,$cc,$r0); | ||
104 | &add($h0,$t0,$h0); &FR($t0); | ||
105 | &cmpult($r0,$cc,$cc); | ||
106 | &add($h0,$cc,$cc); &FR($h0); | ||
107 | |||
108 | &st($r0,&QWPw(-1,$rp)); &FR($r0); | ||
109 | &bgt($count,&label("last_loop")); | ||
110 | &function_end_A($name); | ||
111 | |||
112 | ###################################################### | ||
113 | &set_label("finish"); | ||
114 | &add($count,4,$count); | ||
115 | &bgt($count,&label("last_loop")); | ||
116 | |||
117 | &set_label("end"); | ||
118 | &function_end($name); | ||
119 | |||
120 | &fin_pool; | ||
121 | } | ||
122 | |||
123 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_c4.pl b/src/lib/libcrypto/bn/asm/alpha/mul_c4.pl new file mode 100644 index 0000000000..9cc876ded4 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/mul_c4.pl | |||
@@ -0,0 +1,215 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | # upto | ||
5 | |||
6 | sub mul_add_c | ||
7 | { | ||
8 | local($a,$b,$c0,$c1,$c2)=@_; | ||
9 | local($l1,$h1,$t1,$t2); | ||
10 | |||
11 | &mul($a,$b,($l1)=&NR(1)); | ||
12 | &muh($a,$b,($h1)=&NR(1)); | ||
13 | &add($c0,$l1,$c0); | ||
14 | &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); | ||
15 | &add($t1,$h1,$h1); &FR($t1); | ||
16 | &add($c1,$h1,$c1); | ||
17 | &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); | ||
18 | &add($c2,$t2,$c2); &FR($t2); | ||
19 | } | ||
20 | |||
21 | sub bn_mul_comba4 | ||
22 | { | ||
23 | local($name)=@_; | ||
24 | local(@a,@b,$r,$c0,$c1,$c2); | ||
25 | |||
26 | $cnt=1; | ||
27 | &init_pool(3); | ||
28 | |||
29 | $rp=&wparam(0); | ||
30 | $ap=&wparam(1); | ||
31 | $bp=&wparam(2); | ||
32 | |||
33 | &function_begin($name,""); | ||
34 | |||
35 | &comment(""); | ||
36 | |||
37 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
38 | &ld(($b[0])=&NR(1),&QWPw(0,$bp)); | ||
39 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
40 | &ld(($b[1])=&NR(1),&QWPw(1,$bp)); | ||
41 | &mul($a[0],$b[0],($r00)=&NR(1)); | ||
42 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
43 | &ld(($b[2])=&NR(1),&QWPw(2,$bp)); | ||
44 | &muh($a[0],$b[0],($r01)=&NR(1)); | ||
45 | &FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap)); | ||
46 | &FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp)); | ||
47 | &mul($a[0],$b[1],($r02)=&NR(1)); | ||
48 | |||
49 | ($R,$H1,$H2)=&NR(3); | ||
50 | |||
51 | &st($r00,&QWPw(0,$rp)); &FR($r00); | ||
52 | |||
53 | &mov("zero",$R); | ||
54 | &mul($a[1],$b[0],($r03)=&NR(1)); | ||
55 | |||
56 | &mov("zero",$H1); | ||
57 | &mov("zero",$H0); | ||
58 | &add($R,$r01,$R); | ||
59 | &muh($a[0],$b[1],($r04)=&NR(1)); | ||
60 | &cmpult($R,$r01,($t01)=&NR(1)); &FR($r01); | ||
61 | &add($R,$r02,$R); | ||
62 | &add($H1,$t01,$H1) &FR($t01); | ||
63 | &muh($a[1],$b[0],($r05)=&NR(1)); | ||
64 | &cmpult($R,$r02,($t02)=&NR(1)); &FR($r02); | ||
65 | &add($R,$r03,$R); | ||
66 | &add($H2,$t02,$H2) &FR($t02); | ||
67 | &mul($a[0],$b[2],($r06)=&NR(1)); | ||
68 | &cmpult($R,$r03,($t03)=&NR(1)); &FR($r03); | ||
69 | &add($H1,$t03,$H1) &FR($t03); | ||
70 | &st($R,&QWPw(1,$rp)); | ||
71 | &add($H1,$H2,$R); | ||
72 | |||
73 | &mov("zero",$H1); | ||
74 | &add($R,$r04,$R); | ||
75 | &mov("zero",$H2); | ||
76 | &mul($a[1],$b[1],($r07)=&NR(1)); | ||
77 | &cmpult($R,$r04,($t04)=&NR(1)); &FR($r04); | ||
78 | &add($R,$r05,$R); | ||
79 | &add($H1,$t04,$H1) &FR($t04); | ||
80 | &mul($a[2],$b[0],($r08)=&NR(1)); | ||
81 | &cmpult($R,$r05,($t05)=&NR(1)); &FR($r05); | ||
82 | &add($R,$r01,$R); | ||
83 | &add($H2,$t05,$H2) &FR($t05); | ||
84 | &muh($a[0],$b[2],($r09)=&NR(1)); | ||
85 | &cmpult($R,$r06,($t06)=&NR(1)); &FR($r06); | ||
86 | &add($R,$r07,$R); | ||
87 | &add($H1,$t06,$H1) &FR($t06); | ||
88 | &muh($a[1],$b[1],($r10)=&NR(1)); | ||
89 | &cmpult($R,$r07,($t07)=&NR(1)); &FR($r07); | ||
90 | &add($R,$r08,$R); | ||
91 | &add($H2,$t07,$H2) &FR($t07); | ||
92 | &muh($a[2],$b[0],($r11)=&NR(1)); | ||
93 | &cmpult($R,$r08,($t08)=&NR(1)); &FR($r08); | ||
94 | &add($H1,$t08,$H1) &FR($t08); | ||
95 | &st($R,&QWPw(2,$rp)); | ||
96 | &add($H1,$H2,$R); | ||
97 | |||
98 | &mov("zero",$H1); | ||
99 | &add($R,$r09,$R); | ||
100 | &mov("zero",$H2); | ||
101 | &mul($a[0],$b[3],($r12)=&NR(1)); | ||
102 | &cmpult($R,$r09,($t09)=&NR(1)); &FR($r09); | ||
103 | &add($R,$r10,$R); | ||
104 | &add($H1,$t09,$H1) &FR($t09); | ||
105 | &mul($a[1],$b[2],($r13)=&NR(1)); | ||
106 | &cmpult($R,$r10,($t10)=&NR(1)); &FR($r10); | ||
107 | &add($R,$r11,$R); | ||
108 | &add($H1,$t10,$H1) &FR($t10); | ||
109 | &mul($a[2],$b[1],($r14)=&NR(1)); | ||
110 | &cmpult($R,$r11,($t11)=&NR(1)); &FR($r11); | ||
111 | &add($R,$r12,$R); | ||
112 | &add($H1,$t11,$H1) &FR($t11); | ||
113 | &mul($a[3],$b[0],($r15)=&NR(1)); | ||
114 | &cmpult($R,$r12,($t12)=&NR(1)); &FR($r12); | ||
115 | &add($R,$r13,$R); | ||
116 | &add($H1,$t12,$H1) &FR($t12); | ||
117 | &muh($a[0],$b[3],($r16)=&NR(1)); | ||
118 | &cmpult($R,$r13,($t13)=&NR(1)); &FR($r13); | ||
119 | &add($R,$r14,$R); | ||
120 | &add($H1,$t13,$H1) &FR($t13); | ||
121 | &muh($a[1],$b[2],($r17)=&NR(1)); | ||
122 | &cmpult($R,$r14,($t14)=&NR(1)); &FR($r14); | ||
123 | &add($R,$r15,$R); | ||
124 | &add($H1,$t14,$H1) &FR($t14); | ||
125 | &muh($a[2],$b[1],($r18)=&NR(1)); | ||
126 | &cmpult($R,$r15,($t15)=&NR(1)); &FR($r15); | ||
127 | &add($H1,$t15,$H1) &FR($t15); | ||
128 | &st($R,&QWPw(3,$rp)); | ||
129 | &add($H1,$H2,$R); | ||
130 | |||
131 | &mov("zero",$H1); | ||
132 | &add($R,$r16,$R); | ||
133 | &mov("zero",$H2); | ||
134 | &muh($a[3],$b[0],($r19)=&NR(1)); | ||
135 | &cmpult($R,$r16,($t16)=&NR(1)); &FR($r16); | ||
136 | &add($R,$r17,$R); | ||
137 | &add($H1,$t16,$H1) &FR($t16); | ||
138 | &mul($a[1],$b[3],($r20)=&NR(1)); | ||
139 | &cmpult($R,$r17,($t17)=&NR(1)); &FR($r17); | ||
140 | &add($R,$r18,$R); | ||
141 | &add($H1,$t17,$H1) &FR($t17); | ||
142 | &mul($a[2],$b[2],($r21)=&NR(1)); | ||
143 | &cmpult($R,$r18,($t18)=&NR(1)); &FR($r18); | ||
144 | &add($R,$r19,$R); | ||
145 | &add($H1,$t18,$H1) &FR($t18); | ||
146 | &mul($a[3],$b[1],($r22)=&NR(1)); | ||
147 | &cmpult($R,$r19,($t19)=&NR(1)); &FR($r19); | ||
148 | &add($R,$r20,$R); | ||
149 | &add($H1,$t19,$H1) &FR($t19); | ||
150 | &muh($a[1],$b[3],($r23)=&NR(1)); | ||
151 | &cmpult($R,$r20,($t20)=&NR(1)); &FR($r20); | ||
152 | &add($R,$r21,$R); | ||
153 | &add($H1,$t20,$H1) &FR($t20); | ||
154 | &muh($a[2],$b[2],($r24)=&NR(1)); | ||
155 | &cmpult($R,$r21,($t21)=&NR(1)); &FR($r21); | ||
156 | &add($R,$r22,$R); | ||
157 | &add($H1,$t21,$H1) &FR($t21); | ||
158 | &muh($a[3],$b[1],($r25)=&NR(1)); | ||
159 | &cmpult($R,$r22,($t22)=&NR(1)); &FR($r22); | ||
160 | &add($H1,$t22,$H1) &FR($t22); | ||
161 | &st($R,&QWPw(4,$rp)); | ||
162 | &add($H1,$H2,$R); | ||
163 | |||
164 | &mov("zero",$H1); | ||
165 | &add($R,$r23,$R); | ||
166 | &mov("zero",$H2); | ||
167 | &mul($a[2],$b[3],($r26)=&NR(1)); | ||
168 | &cmpult($R,$r23,($t23)=&NR(1)); &FR($r23); | ||
169 | &add($R,$r24,$R); | ||
170 | &add($H1,$t23,$H1) &FR($t23); | ||
171 | &mul($a[3],$b[2],($r27)=&NR(1)); | ||
172 | &cmpult($R,$r24,($t24)=&NR(1)); &FR($r24); | ||
173 | &add($R,$r25,$R); | ||
174 | &add($H1,$t24,$H1) &FR($t24); | ||
175 | &muh($a[2],$b[3],($r28)=&NR(1)); | ||
176 | &cmpult($R,$r25,($t25)=&NR(1)); &FR($r25); | ||
177 | &add($R,$r26,$R); | ||
178 | &add($H1,$t25,$H1) &FR($t25); | ||
179 | &muh($a[3],$b[2],($r29)=&NR(1)); | ||
180 | &cmpult($R,$r26,($t26)=&NR(1)); &FR($r26); | ||
181 | &add($R,$r27,$R); | ||
182 | &add($H1,$t26,$H1) &FR($t26); | ||
183 | &mul($a[3],$b[3],($r30)=&NR(1)); | ||
184 | &cmpult($R,$r27,($t27)=&NR(1)); &FR($r27); | ||
185 | &add($H1,$t27,$H1) &FR($t27); | ||
186 | &st($R,&QWPw(5,$rp)); | ||
187 | &add($H1,$H2,$R); | ||
188 | |||
189 | &mov("zero",$H1); | ||
190 | &add($R,$r28,$R); | ||
191 | &mov("zero",$H2); | ||
192 | &muh($a[3],$b[3],($r31)=&NR(1)); | ||
193 | &cmpult($R,$r28,($t28)=&NR(1)); &FR($r28); | ||
194 | &add($R,$r29,$R); | ||
195 | &add($H1,$t28,$H1) &FR($t28); | ||
196 | ############ | ||
197 | &cmpult($R,$r29,($t29)=&NR(1)); &FR($r29); | ||
198 | &add($R,$r30,$R); | ||
199 | &add($H1,$t29,$H1) &FR($t29); | ||
200 | ############ | ||
201 | &cmpult($R,$r30,($t30)=&NR(1)); &FR($r30); | ||
202 | &add($H1,$t30,$H1) &FR($t30); | ||
203 | &st($R,&QWPw(6,$rp)); | ||
204 | &add($H1,$H2,$R); | ||
205 | |||
206 | &add($R,$r31,$R); &FR($r31); | ||
207 | &st($R,&QWPw(7,$rp)); | ||
208 | |||
209 | &FR($R,$H1,$H2); | ||
210 | &function_end($name); | ||
211 | |||
212 | &fin_pool; | ||
213 | } | ||
214 | |||
215 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl b/src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl new file mode 100644 index 0000000000..79d86dd25c --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl | |||
@@ -0,0 +1,98 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub mul_add_c | ||
5 | { | ||
6 | local($a,$b,$c0,$c1,$c2)=@_; | ||
7 | local($l1,$h1,$t1,$t2); | ||
8 | |||
9 | print STDERR "count=$cnt\n"; $cnt++; | ||
10 | &mul($a,$b,($l1)=&NR(1)); | ||
11 | &muh($a,$b,($h1)=&NR(1)); | ||
12 | &add($c0,$l1,$c0); | ||
13 | &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); | ||
14 | &add($t1,$h1,$h1); &FR($t1); | ||
15 | &add($c1,$h1,$c1); | ||
16 | &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); | ||
17 | &add($c2,$t2,$c2); &FR($t2); | ||
18 | } | ||
19 | |||
20 | sub bn_mul_comba4 | ||
21 | { | ||
22 | local($name)=@_; | ||
23 | local(@a,@b,$r,$c0,$c1,$c2); | ||
24 | |||
25 | $cnt=1; | ||
26 | &init_pool(3); | ||
27 | |||
28 | $rp=&wparam(0); | ||
29 | $ap=&wparam(1); | ||
30 | $bp=&wparam(2); | ||
31 | |||
32 | &function_begin($name,""); | ||
33 | |||
34 | &comment(""); | ||
35 | |||
36 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
37 | &ld(($b[0])=&NR(1),&QWPw(0,$bp)); | ||
38 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
39 | &ld(($b[1])=&NR(1),&QWPw(1,$bp)); | ||
40 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
41 | &ld(($b[2])=&NR(1),&QWPw(2,$bp)); | ||
42 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap); | ||
43 | &ld(($b[3])=&NR(1),&QWPw(3,$bp)); &FR($bp); | ||
44 | |||
45 | ($c0,$c1,$c2)=&NR(3); | ||
46 | &mov("zero",$c2); | ||
47 | &mul($a[0],$b[0],$c0); | ||
48 | &muh($a[0],$b[0],$c1); | ||
49 | &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
50 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
51 | &mov("zero",$c2); | ||
52 | |||
53 | &mul_add_c($a[0],$b[1],$c0,$c1,$c2); | ||
54 | &mul_add_c($a[1],$b[0],$c0,$c1,$c2); | ||
55 | &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
56 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
57 | &mov("zero",$c2); | ||
58 | |||
59 | &mul_add_c($a[1],$b[1],$c0,$c1,$c2); | ||
60 | &mul_add_c($a[0],$b[2],$c0,$c1,$c2); | ||
61 | &mul_add_c($a[2],$b[0],$c0,$c1,$c2); | ||
62 | &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
63 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
64 | &mov("zero",$c2); | ||
65 | |||
66 | &mul_add_c($a[0],$b[3],$c0,$c1,$c2); &FR($a[0]); | ||
67 | &mul_add_c($a[1],$b[2],$c0,$c1,$c2); | ||
68 | &mul_add_c($a[2],$b[1],$c0,$c1,$c2); | ||
69 | &mul_add_c($a[3],$b[0],$c0,$c1,$c2); &FR($b[0]); | ||
70 | &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
71 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
72 | &mov("zero",$c2); | ||
73 | |||
74 | &mul_add_c($a[1],$b[3],$c0,$c1,$c2); &FR($a[1]); | ||
75 | &mul_add_c($a[2],$b[2],$c0,$c1,$c2); | ||
76 | &mul_add_c($a[3],$b[1],$c0,$c1,$c2); &FR($b[1]); | ||
77 | &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
78 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
79 | &mov("zero",$c2); | ||
80 | |||
81 | &mul_add_c($a[2],$b[3],$c0,$c1,$c2); &FR($a[2]); | ||
82 | &mul_add_c($a[3],$b[2],$c0,$c1,$c2); &FR($b[2]); | ||
83 | &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR($c0); | ||
84 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
85 | &mov("zero",$c2); | ||
86 | |||
87 | &mul_add_c($a[3],$b[3],$c0,$c1,$c2); &FR($a[3],$b[3]); | ||
88 | &st($c0,&QWPw(6,$rp)); | ||
89 | &st($c1,&QWPw(7,$rp)); | ||
90 | |||
91 | &FR($c0,$c1,$c2); | ||
92 | |||
93 | &function_end($name); | ||
94 | |||
95 | &fin_pool; | ||
96 | } | ||
97 | |||
98 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_c8.pl b/src/lib/libcrypto/bn/asm/alpha/mul_c8.pl new file mode 100644 index 0000000000..525ca7494b --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/mul_c8.pl | |||
@@ -0,0 +1,177 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_mul_comba8 | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local(@a,@b,$r,$c0,$c1,$c2); | ||
8 | |||
9 | $cnt=1; | ||
10 | &init_pool(3); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $bp=&wparam(2); | ||
15 | |||
16 | &function_begin($name,""); | ||
17 | |||
18 | &comment(""); | ||
19 | |||
20 | &stack_push(2); | ||
21 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
22 | &ld(($b[0])=&NR(1),&QWPw(0,$bp)); | ||
23 | &st($reg_s0,&swtmp(0)); &FR($reg_s0); | ||
24 | &st($reg_s1,&swtmp(1)); &FR($reg_s1); | ||
25 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
26 | &ld(($b[1])=&NR(1),&QWPw(1,$bp)); | ||
27 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
28 | &ld(($b[2])=&NR(1),&QWPw(2,$bp)); | ||
29 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); | ||
30 | &ld(($b[3])=&NR(1),&QWPw(3,$bp)); | ||
31 | &ld(($a[4])=&NR(1),&QWPw(1,$ap)); | ||
32 | &ld(($b[4])=&NR(1),&QWPw(1,$bp)); | ||
33 | &ld(($a[5])=&NR(1),&QWPw(1,$ap)); | ||
34 | &ld(($b[5])=&NR(1),&QWPw(1,$bp)); | ||
35 | &ld(($a[6])=&NR(1),&QWPw(1,$ap)); | ||
36 | &ld(($b[6])=&NR(1),&QWPw(1,$bp)); | ||
37 | &ld(($a[7])=&NR(1),&QWPw(1,$ap)); &FR($ap); | ||
38 | &ld(($b[7])=&NR(1),&QWPw(1,$bp)); &FR($bp); | ||
39 | |||
40 | ($c0,$c1,$c2)=&NR(3); | ||
41 | &mov("zero",$c2); | ||
42 | &mul($a[0],$b[0],$c0); | ||
43 | &muh($a[0],$b[0],$c1); | ||
44 | &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR(1); | ||
45 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
46 | &mov("zero",$c2); | ||
47 | |||
48 | &mul_add_c($a[0],$b[1],$c0,$c1,$c2); | ||
49 | &mul_add_c($a[1],$b[0],$c0,$c1,$c2); | ||
50 | &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR(1); | ||
51 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
52 | &mov("zero",$c2); | ||
53 | |||
54 | &mul_add_c($a[0],$b[2],$c0,$c1,$c2); | ||
55 | &mul_add_c($a[1],$b[1],$c0,$c1,$c2); | ||
56 | &mul_add_c($a[2],$b[0],$c0,$c1,$c2); | ||
57 | &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR(1); | ||
58 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
59 | &mov("zero",$c2); | ||
60 | |||
61 | &mul_add_c($a[0],$b[3],$c0,$c1,$c2); | ||
62 | &mul_add_c($a[1],$b[2],$c0,$c1,$c2); | ||
63 | &mul_add_c($a[2],$b[1],$c0,$c1,$c2); | ||
64 | &mul_add_c($a[3],$b[0],$c0,$c1,$c2); | ||
65 | &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR(1); | ||
66 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
67 | &mov("zero",$c2); | ||
68 | |||
69 | &mul_add_c($a[0],$b[4],$c0,$c1,$c2); | ||
70 | &mul_add_c($a[1],$b[3],$c0,$c1,$c2); | ||
71 | &mul_add_c($a[2],$b[2],$c0,$c1,$c2); | ||
72 | &mul_add_c($a[3],$b[1],$c0,$c1,$c2); | ||
73 | &mul_add_c($a[4],$b[0],$c0,$c1,$c2); | ||
74 | &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR(1); | ||
75 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
76 | &mov("zero",$c2); | ||
77 | |||
78 | &mul_add_c($a[0],$b[5],$c0,$c1,$c2); | ||
79 | &mul_add_c($a[1],$b[4],$c0,$c1,$c2); | ||
80 | &mul_add_c($a[2],$b[3],$c0,$c1,$c2); | ||
81 | &mul_add_c($a[3],$b[2],$c0,$c1,$c2); | ||
82 | &mul_add_c($a[4],$b[1],$c0,$c1,$c2); | ||
83 | &mul_add_c($a[5],$b[0],$c0,$c1,$c2); | ||
84 | &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR(1); | ||
85 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
86 | &mov("zero",$c2); | ||
87 | |||
88 | &mul_add_c($a[0],$b[6],$c0,$c1,$c2); | ||
89 | &mul_add_c($a[1],$b[5],$c0,$c1,$c2); | ||
90 | &mul_add_c($a[2],$b[4],$c0,$c1,$c2); | ||
91 | &mul_add_c($a[3],$b[3],$c0,$c1,$c2); | ||
92 | &mul_add_c($a[4],$b[2],$c0,$c1,$c2); | ||
93 | &mul_add_c($a[5],$b[1],$c0,$c1,$c2); | ||
94 | &mul_add_c($a[6],$b[0],$c0,$c1,$c2); | ||
95 | &st($c0,&QWPw(6,$rp)); &FR($c0); ($c0)=&NR(1); | ||
96 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
97 | &mov("zero",$c2); | ||
98 | |||
99 | &mul_add_c($a[0],$b[7],$c0,$c1,$c2); &FR($a[0]); | ||
100 | &mul_add_c($a[1],$b[6],$c0,$c1,$c2); | ||
101 | &mul_add_c($a[2],$b[5],$c0,$c1,$c2); | ||
102 | &mul_add_c($a[3],$b[4],$c0,$c1,$c2); | ||
103 | &mul_add_c($a[4],$b[3],$c0,$c1,$c2); | ||
104 | &mul_add_c($a[5],$b[2],$c0,$c1,$c2); | ||
105 | &mul_add_c($a[6],$b[1],$c0,$c1,$c2); | ||
106 | &mul_add_c($a[7],$b[0],$c0,$c1,$c2); &FR($b[0]); | ||
107 | &st($c0,&QWPw(7,$rp)); &FR($c0); ($c0)=&NR(1); | ||
108 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
109 | &mov("zero",$c2); | ||
110 | |||
111 | &mul_add_c($a[1],$b[7],$c0,$c1,$c2); &FR($a[1]); | ||
112 | &mul_add_c($a[2],$b[6],$c0,$c1,$c2); | ||
113 | &mul_add_c($a[3],$b[5],$c0,$c1,$c2); | ||
114 | &mul_add_c($a[4],$b[4],$c0,$c1,$c2); | ||
115 | &mul_add_c($a[5],$b[3],$c0,$c1,$c2); | ||
116 | &mul_add_c($a[6],$b[2],$c0,$c1,$c2); | ||
117 | &mul_add_c($a[7],$b[1],$c0,$c1,$c2); &FR($b[1]); | ||
118 | &st($c0,&QWPw(8,$rp)); &FR($c0); ($c0)=&NR(1); | ||
119 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
120 | &mov("zero",$c2); | ||
121 | |||
122 | &mul_add_c($a[2],$b[7],$c0,$c1,$c2); &FR($a[2]); | ||
123 | &mul_add_c($a[3],$b[6],$c0,$c1,$c2); | ||
124 | &mul_add_c($a[4],$b[5],$c0,$c1,$c2); | ||
125 | &mul_add_c($a[5],$b[4],$c0,$c1,$c2); | ||
126 | &mul_add_c($a[6],$b[3],$c0,$c1,$c2); | ||
127 | &mul_add_c($a[7],$b[2],$c0,$c1,$c2); &FR($b[2]); | ||
128 | &st($c0,&QWPw(9,$rp)); &FR($c0); ($c0)=&NR(1); | ||
129 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
130 | &mov("zero",$c2); | ||
131 | |||
132 | &mul_add_c($a[3],$b[7],$c0,$c1,$c2); &FR($a[3]); | ||
133 | &mul_add_c($a[4],$b[6],$c0,$c1,$c2); | ||
134 | &mul_add_c($a[5],$b[5],$c0,$c1,$c2); | ||
135 | &mul_add_c($a[6],$b[4],$c0,$c1,$c2); | ||
136 | &mul_add_c($a[7],$b[3],$c0,$c1,$c2); &FR($b[3]); | ||
137 | &st($c0,&QWPw(10,$rp)); &FR($c0); ($c0)=&NR(1); | ||
138 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
139 | &mov("zero",$c2); | ||
140 | |||
141 | &mul_add_c($a[4],$b[7],$c0,$c1,$c2); &FR($a[4]); | ||
142 | &mul_add_c($a[5],$b[6],$c0,$c1,$c2); | ||
143 | &mul_add_c($a[6],$b[5],$c0,$c1,$c2); | ||
144 | &mul_add_c($a[7],$b[4],$c0,$c1,$c2); &FR($b[4]); | ||
145 | &st($c0,&QWPw(11,$rp)); &FR($c0); ($c0)=&NR(1); | ||
146 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
147 | &mov("zero",$c2); | ||
148 | |||
149 | &mul_add_c($a[5],$b[7],$c0,$c1,$c2); &FR($a[5]); | ||
150 | &mul_add_c($a[6],$b[6],$c0,$c1,$c2); | ||
151 | &mul_add_c($a[7],$b[5],$c0,$c1,$c2); &FR($b[5]); | ||
152 | &st($c0,&QWPw(12,$rp)); &FR($c0); ($c0)=&NR(1); | ||
153 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
154 | &mov("zero",$c2); | ||
155 | |||
156 | &mul_add_c($a[6],$b[7],$c0,$c1,$c2); &FR($a[6]); | ||
157 | &mul_add_c($a[7],$b[6],$c0,$c1,$c2); &FR($b[6]); | ||
158 | &st($c0,&QWPw(13,$rp)); &FR($c0); ($c0)=&NR(1); | ||
159 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
160 | &mov("zero",$c2); | ||
161 | |||
162 | &mul_add_c($a[7],$b[7],$c0,$c1,$c2); &FR($a[7],$b[7]); | ||
163 | &st($c0,&QWPw(14,$rp)); | ||
164 | &st($c1,&QWPw(15,$rp)); | ||
165 | |||
166 | &FR($c0,$c1,$c2); | ||
167 | |||
168 | &ld($reg_s0,&swtmp(0)); | ||
169 | &ld($reg_s1,&swtmp(1)); | ||
170 | &stack_pop(2); | ||
171 | |||
172 | &function_end($name); | ||
173 | |||
174 | &fin_pool; | ||
175 | } | ||
176 | |||
177 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/sqr.pl b/src/lib/libcrypto/bn/asm/alpha/sqr.pl new file mode 100644 index 0000000000..a55b696906 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/sqr.pl | |||
@@ -0,0 +1,113 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_sqr_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r,$couny); | ||
8 | |||
9 | &init_pool(3); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $count=&wparam(2); | ||
15 | |||
16 | &function_begin($name,""); | ||
17 | |||
18 | &comment(""); | ||
19 | &sub($count,4,$count); | ||
20 | &mov("zero",$cc); | ||
21 | &br(&label("finish")); | ||
22 | &blt($count,&label("finish")); | ||
23 | |||
24 | ($a0,$r0)=&NR(2); | ||
25 | &ld($a0,&QWPw(0,$ap)); | ||
26 | &ld($r0,&QWPw(0,$rp)); | ||
27 | |||
28 | $a=<<'EOF'; | ||
29 | ########################################################## | ||
30 | &set_label("loop"); | ||
31 | |||
32 | ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); | ||
33 | ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp)); | ||
34 | ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); | ||
35 | ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp)); | ||
36 | ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); | ||
37 | ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp)); | ||
38 | |||
39 | ($o0,$t0)=&NR(2); | ||
40 | &add($a0,$b0,$o0); | ||
41 | &cmpult($o0,$b0,$t0); | ||
42 | &add($o0,$cc,$o0); | ||
43 | &cmpult($o0,$cc,$cc); | ||
44 | &add($cc,$t0,$cc); &FR($t0); | ||
45 | |||
46 | ($t1,$o1)=&NR(2); | ||
47 | |||
48 | &add($a1,$b1,$o1); &FR($a1); | ||
49 | &cmpult($o1,$b1,$t1); &FR($b1); | ||
50 | &add($o1,$cc,$o1); | ||
51 | &cmpult($o1,$cc,$cc); | ||
52 | &add($cc,$t1,$cc); &FR($t1); | ||
53 | |||
54 | ($t2,$o2)=&NR(2); | ||
55 | |||
56 | &add($a2,$b2,$o2); &FR($a2); | ||
57 | &cmpult($o2,$b2,$t2); &FR($b2); | ||
58 | &add($o2,$cc,$o2); | ||
59 | &cmpult($o2,$cc,$cc); | ||
60 | &add($cc,$t2,$cc); &FR($t2); | ||
61 | |||
62 | ($t3,$o3)=&NR(2); | ||
63 | |||
64 | &add($a3,$b3,$o3); &FR($a3); | ||
65 | &cmpult($o3,$b3,$t3); &FR($b3); | ||
66 | &add($o3,$cc,$o3); | ||
67 | &cmpult($o3,$cc,$cc); | ||
68 | &add($cc,$t3,$cc); &FR($t3); | ||
69 | |||
70 | &st($o0,&QWPw(0,$rp)); &FR($o0); | ||
71 | &st($o1,&QWPw(0,$rp)); &FR($o1); | ||
72 | &st($o2,&QWPw(0,$rp)); &FR($o2); | ||
73 | &st($o3,&QWPw(0,$rp)); &FR($o3); | ||
74 | |||
75 | &sub($count,4,$count); # count-=4 | ||
76 | &add($ap,4*$QWS,$ap); # count+=4 | ||
77 | &add($bp,4*$QWS,$bp); # count+=4 | ||
78 | &add($rp,4*$QWS,$rp); # count+=4 | ||
79 | |||
80 | &blt($count,&label("finish")); | ||
81 | &ld($a0,&QWPw(0,$ap)); | ||
82 | &ld($b0,&QWPw(0,$bp)); | ||
83 | &br(&label("loop")); | ||
84 | EOF | ||
85 | ################################################## | ||
86 | # Do the last 0..3 words | ||
87 | |||
88 | &set_label("last_loop"); | ||
89 | |||
90 | &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a | ||
91 | &mul($a0,$a0,($l0)=&NR(1)); | ||
92 | &add($ap,$QWS,$ap); | ||
93 | &add($rp,2*$QWS,$rp); | ||
94 | &sub($count,1,$count); | ||
95 | &muh($a0,$a0,($h0)=&NR(1)); &FR($a0); | ||
96 | &st($l0,&QWPw(-2,$rp)); &FR($l0); | ||
97 | &st($h0,&QWPw(-1,$rp)); &FR($h0); | ||
98 | |||
99 | &bgt($count,&label("last_loop")); | ||
100 | &function_end_A($name); | ||
101 | |||
102 | ###################################################### | ||
103 | &set_label("finish"); | ||
104 | &add($count,4,$count); | ||
105 | &bgt($count,&label("last_loop")); | ||
106 | |||
107 | &set_label("end"); | ||
108 | &function_end($name); | ||
109 | |||
110 | &fin_pool; | ||
111 | } | ||
112 | |||
113 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl b/src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl new file mode 100644 index 0000000000..bf33f5b503 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl | |||
@@ -0,0 +1,109 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub sqr_add_c | ||
5 | { | ||
6 | local($a,$c0,$c1,$c2)=@_; | ||
7 | local($l1,$h1,$t1,$t2); | ||
8 | |||
9 | &mul($a,$a,($l1)=&NR(1)); | ||
10 | &muh($a,$a,($h1)=&NR(1)); | ||
11 | &add($c0,$l1,$c0); | ||
12 | &add($c1,$h1,$c1); | ||
13 | &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); | ||
14 | &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); | ||
15 | &add($c1,$t1,$c1); &FR($t1); | ||
16 | &add($c2,$t2,$c2); &FR($t2); | ||
17 | } | ||
18 | |||
19 | sub sqr_add_c2 | ||
20 | { | ||
21 | local($a,$b,$c0,$c1,$c2)=@_; | ||
22 | local($l1,$h1,$t1,$t2); | ||
23 | |||
24 | &mul($a,$b,($l1)=&NR(1)); | ||
25 | &muh($a,$b,($h1)=&NR(1)); | ||
26 | &cmplt($l1,"zero",($lc1)=&NR(1)); | ||
27 | &cmplt($h1,"zero",($hc1)=&NR(1)); | ||
28 | &add($l1,$l1,$l1); | ||
29 | &add($h1,$h1,$h1); | ||
30 | &add($h1,$lc1,$h1); &FR($lc1); | ||
31 | &add($c2,$hc1,$c2); &FR($hc1); | ||
32 | |||
33 | &add($c0,$l1,$c0); | ||
34 | &add($c1,$h1,$c1); | ||
35 | &cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1); | ||
36 | &cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1); | ||
37 | |||
38 | &add($c1,$lc1,$c1); &FR($lc1); | ||
39 | &add($c2,$hc1,$c2); &FR($hc1); | ||
40 | } | ||
41 | |||
42 | |||
43 | sub bn_sqr_comba4 | ||
44 | { | ||
45 | local($name)=@_; | ||
46 | local(@a,@b,$r,$c0,$c1,$c2); | ||
47 | |||
48 | $cnt=1; | ||
49 | &init_pool(2); | ||
50 | |||
51 | $rp=&wparam(0); | ||
52 | $ap=&wparam(1); | ||
53 | |||
54 | &function_begin($name,""); | ||
55 | |||
56 | &comment(""); | ||
57 | |||
58 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
59 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
60 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
61 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap); | ||
62 | |||
63 | ($c0,$c1,$c2)=&NR(3); | ||
64 | |||
65 | &mov("zero",$c2); | ||
66 | &mul($a[0],$a[0],$c0); | ||
67 | &muh($a[0],$a[0],$c1); | ||
68 | &st($c0,&QWPw(0,$rp)); | ||
69 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
70 | &mov("zero",$c2); | ||
71 | |||
72 | &sqr_add_c2($a[0],$a[1],$c0,$c1,$c2); | ||
73 | &st($c0,&QWPw(1,$rp)); | ||
74 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
75 | &mov("zero",$c2); | ||
76 | |||
77 | &sqr_add_c($a[1],$c0,$c1,$c2); | ||
78 | &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2); | ||
79 | &st($c0,&QWPw(2,$rp)); | ||
80 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
81 | &mov("zero",$c2); | ||
82 | |||
83 | &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2); | ||
84 | &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2); | ||
85 | &st($c0,&QWPw(3,$rp)); | ||
86 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
87 | &mov("zero",$c2); | ||
88 | |||
89 | &sqr_add_c($a[2],$c0,$c1,$c2); | ||
90 | &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2); | ||
91 | &st($c0,&QWPw(4,$rp)); | ||
92 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
93 | &mov("zero",$c2); | ||
94 | |||
95 | &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2); | ||
96 | &st($c0,&QWPw(5,$rp)); | ||
97 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
98 | &mov("zero",$c2); | ||
99 | |||
100 | &sqr_add_c($a[3],$c0,$c1,$c2); | ||
101 | &st($c0,&QWPw(6,$rp)); | ||
102 | &st($c1,&QWPw(7,$rp)); | ||
103 | |||
104 | &function_end($name); | ||
105 | |||
106 | &fin_pool; | ||
107 | } | ||
108 | |||
109 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl b/src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl new file mode 100644 index 0000000000..b4afe085f1 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl | |||
@@ -0,0 +1,132 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_sqr_comba8 | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local(@a,@b,$r,$c0,$c1,$c2); | ||
8 | |||
9 | $cnt=1; | ||
10 | &init_pool(2); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | |||
15 | &function_begin($name,""); | ||
16 | |||
17 | &comment(""); | ||
18 | |||
19 | &ld(($a[0])=&NR(1),&QWPw(0,$ap)); | ||
20 | &ld(($a[1])=&NR(1),&QWPw(1,$ap)); | ||
21 | &ld(($a[2])=&NR(1),&QWPw(2,$ap)); | ||
22 | &ld(($a[3])=&NR(1),&QWPw(3,$ap)); | ||
23 | &ld(($a[4])=&NR(1),&QWPw(4,$ap)); | ||
24 | &ld(($a[5])=&NR(1),&QWPw(5,$ap)); | ||
25 | &ld(($a[6])=&NR(1),&QWPw(6,$ap)); | ||
26 | &ld(($a[7])=&NR(1),&QWPw(7,$ap)); &FR($ap); | ||
27 | |||
28 | ($c0,$c1,$c2)=&NR(3); | ||
29 | |||
30 | &mov("zero",$c2); | ||
31 | &mul($a[0],$a[0],$c0); | ||
32 | &muh($a[0],$a[0],$c1); | ||
33 | &st($c0,&QWPw(0,$rp)); | ||
34 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
35 | &mov("zero",$c2); | ||
36 | |||
37 | &sqr_add_c2($a[1],$a[0],$c0,$c1,$c2); | ||
38 | &st($c0,&QWPw(1,$rp)); | ||
39 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
40 | &mov("zero",$c2); | ||
41 | |||
42 | &sqr_add_c($a[1],$c0,$c1,$c2); | ||
43 | &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2); | ||
44 | &st($c0,&QWPw(2,$rp)); | ||
45 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
46 | &mov("zero",$c2); | ||
47 | |||
48 | &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2); | ||
49 | &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2); | ||
50 | &st($c0,&QWPw(3,$rp)); | ||
51 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
52 | &mov("zero",$c2); | ||
53 | |||
54 | &sqr_add_c($a[2],$c0,$c1,$c2); | ||
55 | &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2); | ||
56 | &sqr_add_c2($a[4],$a[0],$c0,$c1,$c2); | ||
57 | &st($c0,&QWPw(4,$rp)); | ||
58 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
59 | &mov("zero",$c2); | ||
60 | |||
61 | &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2); | ||
62 | &sqr_add_c2($a[4],$a[1],$c0,$c1,$c2); | ||
63 | &sqr_add_c2($a[5],$a[0],$c0,$c1,$c2); | ||
64 | &st($c0,&QWPw(5,$rp)); | ||
65 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
66 | &mov("zero",$c2); | ||
67 | |||
68 | &sqr_add_c($a[3],$c0,$c1,$c2); | ||
69 | &sqr_add_c2($a[4],$a[2],$c0,$c1,$c2); | ||
70 | &sqr_add_c2($a[5],$a[1],$c0,$c1,$c2); | ||
71 | &sqr_add_c2($a[6],$a[0],$c0,$c1,$c2); | ||
72 | &st($c0,&QWPw(6,$rp)); | ||
73 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
74 | &mov("zero",$c2); | ||
75 | |||
76 | &sqr_add_c2($a[4],$a[3],$c0,$c1,$c2); | ||
77 | &sqr_add_c2($a[5],$a[2],$c0,$c1,$c2); | ||
78 | &sqr_add_c2($a[6],$a[1],$c0,$c1,$c2); | ||
79 | &sqr_add_c2($a[7],$a[0],$c0,$c1,$c2); | ||
80 | &st($c0,&QWPw(7,$rp)); | ||
81 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
82 | &mov("zero",$c2); | ||
83 | |||
84 | &sqr_add_c($a[4],$c0,$c1,$c2); | ||
85 | &sqr_add_c2($a[5],$a[3],$c0,$c1,$c2); | ||
86 | &sqr_add_c2($a[6],$a[2],$c0,$c1,$c2); | ||
87 | &sqr_add_c2($a[7],$a[1],$c0,$c1,$c2); | ||
88 | &st($c0,&QWPw(8,$rp)); | ||
89 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
90 | &mov("zero",$c2); | ||
91 | |||
92 | &sqr_add_c2($a[5],$a[4],$c0,$c1,$c2); | ||
93 | &sqr_add_c2($a[6],$a[3],$c0,$c1,$c2); | ||
94 | &sqr_add_c2($a[7],$a[2],$c0,$c1,$c2); | ||
95 | &st($c0,&QWPw(9,$rp)); | ||
96 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
97 | &mov("zero",$c2); | ||
98 | |||
99 | &sqr_add_c($a[5],$c0,$c1,$c2); | ||
100 | &sqr_add_c2($a[6],$a[4],$c0,$c1,$c2); | ||
101 | &sqr_add_c2($a[7],$a[3],$c0,$c1,$c2); | ||
102 | &st($c0,&QWPw(10,$rp)); | ||
103 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
104 | &mov("zero",$c2); | ||
105 | |||
106 | &sqr_add_c2($a[6],$a[5],$c0,$c1,$c2); | ||
107 | &sqr_add_c2($a[7],$a[4],$c0,$c1,$c2); | ||
108 | &st($c0,&QWPw(11,$rp)); | ||
109 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
110 | &mov("zero",$c2); | ||
111 | |||
112 | &sqr_add_c($a[6],$c0,$c1,$c2); | ||
113 | &sqr_add_c2($a[7],$a[5],$c0,$c1,$c2); | ||
114 | &st($c0,&QWPw(12,$rp)); | ||
115 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
116 | &mov("zero",$c2); | ||
117 | |||
118 | &sqr_add_c2($a[7],$a[6],$c0,$c1,$c2); | ||
119 | &st($c0,&QWPw(13,$rp)); | ||
120 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
121 | &mov("zero",$c2); | ||
122 | |||
123 | &sqr_add_c($a[7],$c0,$c1,$c2); | ||
124 | &st($c0,&QWPw(14,$rp)); | ||
125 | &st($c1,&QWPw(15,$rp)); | ||
126 | |||
127 | &function_end($name); | ||
128 | |||
129 | &fin_pool; | ||
130 | } | ||
131 | |||
132 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha/sub.pl b/src/lib/libcrypto/bn/asm/alpha/sub.pl new file mode 100644 index 0000000000..d998da5c21 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha/sub.pl | |||
@@ -0,0 +1,108 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # alpha assember | ||
3 | |||
4 | sub bn_sub_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | local($cc,$a,$b,$r); | ||
8 | |||
9 | &init_pool(4); | ||
10 | ($cc)=GR("r0"); | ||
11 | |||
12 | $rp=&wparam(0); | ||
13 | $ap=&wparam(1); | ||
14 | $bp=&wparam(2); | ||
15 | $count=&wparam(3); | ||
16 | |||
17 | &function_begin($name,""); | ||
18 | |||
19 | &comment(""); | ||
20 | &sub($count,4,$count); | ||
21 | &mov("zero",$cc); | ||
22 | &blt($count,&label("finish")); | ||
23 | |||
24 | ($a0,$b0)=&NR(2); | ||
25 | &ld($a0,&QWPw(0,$ap)); | ||
26 | &ld($b0,&QWPw(0,$bp)); | ||
27 | |||
28 | ########################################################## | ||
29 | &set_label("loop"); | ||
30 | |||
31 | ($a1,$tmp,$b1,$a2,$b2,$a3,$b3,$o0)=&NR(8); | ||
32 | &ld($a1,&QWPw(1,$ap)); | ||
33 | &cmpult($a0,$b0,$tmp); # will we borrow? | ||
34 | &ld($b1,&QWPw(1,$bp)); | ||
35 | &sub($a0,$b0,$a0); # do the subtract | ||
36 | &ld($a2,&QWPw(2,$ap)); | ||
37 | &cmpult($a0,$cc,$b0); # will we borrow? | ||
38 | &ld($b2,&QWPw(2,$bp)); | ||
39 | &sub($a0,$cc,$o0); # will we borrow? | ||
40 | &ld($a3,&QWPw(3,$ap)); | ||
41 | &add($b0,$tmp,$cc); ($t1,$o1)=&NR(2); &FR($tmp); | ||
42 | |||
43 | &cmpult($a1,$b1,$t1); # will we borrow? | ||
44 | &sub($a1,$b1,$a1); # do the subtract | ||
45 | &ld($b3,&QWPw(3,$bp)); | ||
46 | &cmpult($a1,$cc,$b1); # will we borrow? | ||
47 | &sub($a1,$cc,$o1); # will we borrow? | ||
48 | &add($b1,$t1,$cc); ($tmp,$o2)=&NR(2); &FR($t1,$a1,$b1); | ||
49 | |||
50 | &cmpult($a2,$b2,$tmp); # will we borrow? | ||
51 | &sub($a2,$b2,$a2); # do the subtract | ||
52 | &st($o0,&QWPw(0,$rp)); &FR($o0); # save | ||
53 | &cmpult($a2,$cc,$b2); # will we borrow? | ||
54 | &sub($a2,$cc,$o2); # will we borrow? | ||
55 | &add($b2,$tmp,$cc); ($t3,$o3)=&NR(2); &FR($tmp,$a2,$b2); | ||
56 | |||
57 | &cmpult($a3,$b3,$t3); # will we borrow? | ||
58 | &sub($a3,$b3,$a3); # do the subtract | ||
59 | &st($o1,&QWPw(1,$rp)); &FR($o1); | ||
60 | &cmpult($a3,$cc,$b3); # will we borrow? | ||
61 | &sub($a3,$cc,$o3); # will we borrow? | ||
62 | &add($b3,$t3,$cc); &FR($t3,$a3,$b3); | ||
63 | |||
64 | &st($o2,&QWPw(2,$rp)); &FR($o2); | ||
65 | &sub($count,4,$count); # count-=4 | ||
66 | &st($o3,&QWPw(3,$rp)); &FR($o3); | ||
67 | &add($ap,4*$QWS,$ap); # count+=4 | ||
68 | &add($bp,4*$QWS,$bp); # count+=4 | ||
69 | &add($rp,4*$QWS,$rp); # count+=4 | ||
70 | |||
71 | &blt($count,&label("finish")); | ||
72 | &ld($a0,&QWPw(0,$ap)); | ||
73 | &ld($b0,&QWPw(0,$bp)); | ||
74 | &br(&label("loop")); | ||
75 | ################################################## | ||
76 | # Do the last 0..3 words | ||
77 | |||
78 | &set_label("last_loop"); | ||
79 | |||
80 | &ld($a0,&QWPw(0,$ap)); # get a | ||
81 | &ld($b0,&QWPw(0,$bp)); # get b | ||
82 | &cmpult($a0,$b0,$tmp); # will we borrow? | ||
83 | &sub($a0,$b0,$a0); # do the subtract | ||
84 | &cmpult($a0,$cc,$b0); # will we borrow? | ||
85 | &sub($a0,$cc,$a0); # will we borrow? | ||
86 | &st($a0,&QWPw(0,$rp)); # save | ||
87 | &add($b0,$tmp,$cc); # add the borrows | ||
88 | |||
89 | &add($ap,$QWS,$ap); | ||
90 | &add($bp,$QWS,$bp); | ||
91 | &add($rp,$QWS,$rp); | ||
92 | &sub($count,1,$count); | ||
93 | &bgt($count,&label("last_loop")); | ||
94 | &function_end_A($name); | ||
95 | |||
96 | ###################################################### | ||
97 | &set_label("finish"); | ||
98 | &add($count,4,$count); | ||
99 | &bgt($count,&label("last_loop")); | ||
100 | |||
101 | &FR($a0,$b0); | ||
102 | &set_label("end"); | ||
103 | &function_end($name); | ||
104 | |||
105 | &fin_pool; | ||
106 | } | ||
107 | |||
108 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/add.pl b/src/lib/libcrypto/bn/asm/x86/add.pl new file mode 100644 index 0000000000..0b5cf583e3 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/add.pl | |||
@@ -0,0 +1,76 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub bn_add_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | |||
8 | &function_begin($name,""); | ||
9 | |||
10 | &comment(""); | ||
11 | $a="esi"; | ||
12 | $b="edi"; | ||
13 | $c="eax"; | ||
14 | $r="ebx"; | ||
15 | $tmp1="ecx"; | ||
16 | $tmp2="edx"; | ||
17 | $num="ebp"; | ||
18 | |||
19 | &mov($r,&wparam(0)); # get r | ||
20 | &mov($a,&wparam(1)); # get a | ||
21 | &mov($b,&wparam(2)); # get b | ||
22 | &mov($num,&wparam(3)); # get num | ||
23 | &xor($c,$c); # clear carry | ||
24 | &and($num,0xfffffff8); # num / 8 | ||
25 | |||
26 | &jz(&label("aw_finish")); | ||
27 | |||
28 | &set_label("aw_loop",0); | ||
29 | for ($i=0; $i<8; $i++) | ||
30 | { | ||
31 | &comment("Round $i"); | ||
32 | |||
33 | &mov($tmp1,&DWP($i*4,$a,"",0)); # *a | ||
34 | &mov($tmp2,&DWP($i*4,$b,"",0)); # *b | ||
35 | &add($tmp1,$c); | ||
36 | &mov($c,0); | ||
37 | &adc($c,$c); | ||
38 | &add($tmp1,$tmp2); | ||
39 | &adc($c,0); | ||
40 | &mov(&DWP($i*4,$r,"",0),$tmp1); # *r | ||
41 | } | ||
42 | |||
43 | &comment(""); | ||
44 | &add($a,32); | ||
45 | &add($b,32); | ||
46 | &add($r,32); | ||
47 | &sub($num,8); | ||
48 | &jnz(&label("aw_loop")); | ||
49 | |||
50 | &set_label("aw_finish",0); | ||
51 | &mov($num,&wparam(3)); # get num | ||
52 | &and($num,7); | ||
53 | &jz(&label("aw_end")); | ||
54 | |||
55 | for ($i=0; $i<7; $i++) | ||
56 | { | ||
57 | &comment("Tail Round $i"); | ||
58 | &mov($tmp1,&DWP($i*4,$a,"",0)); # *a | ||
59 | &mov($tmp2,&DWP($i*4,$b,"",0));# *b | ||
60 | &add($tmp1,$c); | ||
61 | &mov($c,0); | ||
62 | &adc($c,$c); | ||
63 | &add($tmp1,$tmp2); | ||
64 | &adc($c,0); | ||
65 | &dec($num) if ($i != 6); | ||
66 | &mov(&DWP($i*4,$r,"",0),$tmp1); # *a | ||
67 | &jz(&label("aw_end")) if ($i != 6); | ||
68 | } | ||
69 | &set_label("aw_end",0); | ||
70 | |||
71 | # &mov("eax",$c); # $c is "eax" | ||
72 | |||
73 | &function_end($name); | ||
74 | } | ||
75 | |||
76 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/comba.pl b/src/lib/libcrypto/bn/asm/x86/comba.pl new file mode 100644 index 0000000000..2291253629 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/comba.pl | |||
@@ -0,0 +1,277 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub mul_add_c | ||
5 | { | ||
6 | local($a,$ai,$b,$bi,$c0,$c1,$c2,$pos,$i,$na,$nb)=@_; | ||
7 | |||
8 | # pos == -1 if eax and edx are pre-loaded, 0 to load from next | ||
9 | # words, and 1 if load return value | ||
10 | |||
11 | &comment("mul a[$ai]*b[$bi]"); | ||
12 | |||
13 | # "eax" and "edx" will always be pre-loaded. | ||
14 | # &mov("eax",&DWP($ai*4,$a,"",0)) ; | ||
15 | # &mov("edx",&DWP($bi*4,$b,"",0)); | ||
16 | |||
17 | &mul("edx"); | ||
18 | &add($c0,"eax"); | ||
19 | &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 0; # laod next a | ||
20 | &mov("eax",&wparam(0)) if $pos > 0; # load r[] | ||
21 | ### | ||
22 | &adc($c1,"edx"); | ||
23 | &mov("edx",&DWP(($nb)*4,$b,"",0)) if $pos == 0; # laod next b | ||
24 | &mov("edx",&DWP(($nb)*4,$b,"",0)) if $pos == 1; # laod next b | ||
25 | ### | ||
26 | &adc($c2,0); | ||
27 | # is pos > 1, it means it is the last loop | ||
28 | &mov(&DWP($i*4,"eax","",0),$c0) if $pos > 0; # save r[]; | ||
29 | &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # laod next a | ||
30 | } | ||
31 | |||
32 | sub sqr_add_c | ||
33 | { | ||
34 | local($r,$a,$ai,$bi,$c0,$c1,$c2,$pos,$i,$na,$nb)=@_; | ||
35 | |||
36 | # pos == -1 if eax and edx are pre-loaded, 0 to load from next | ||
37 | # words, and 1 if load return value | ||
38 | |||
39 | &comment("sqr a[$ai]*a[$bi]"); | ||
40 | |||
41 | # "eax" and "edx" will always be pre-loaded. | ||
42 | # &mov("eax",&DWP($ai*4,$a,"",0)) ; | ||
43 | # &mov("edx",&DWP($bi*4,$b,"",0)); | ||
44 | |||
45 | if ($ai == $bi) | ||
46 | { &mul("eax");} | ||
47 | else | ||
48 | { &mul("edx");} | ||
49 | &add($c0,"eax"); | ||
50 | &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 0; # load next a | ||
51 | ### | ||
52 | &adc($c1,"edx"); | ||
53 | &mov("edx",&DWP(($nb)*4,$a,"",0)) if ($pos == 1) && ($na != $nb); | ||
54 | ### | ||
55 | &adc($c2,0); | ||
56 | # is pos > 1, it means it is the last loop | ||
57 | &mov(&DWP($i*4,$r,"",0),$c0) if $pos > 0; # save r[]; | ||
58 | &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # load next b | ||
59 | } | ||
60 | |||
61 | sub sqr_add_c2 | ||
62 | { | ||
63 | local($r,$a,$ai,$bi,$c0,$c1,$c2,$pos,$i,$na,$nb)=@_; | ||
64 | |||
65 | # pos == -1 if eax and edx are pre-loaded, 0 to load from next | ||
66 | # words, and 1 if load return value | ||
67 | |||
68 | &comment("sqr a[$ai]*a[$bi]"); | ||
69 | |||
70 | # "eax" and "edx" will always be pre-loaded. | ||
71 | # &mov("eax",&DWP($ai*4,$a,"",0)) ; | ||
72 | # &mov("edx",&DWP($bi*4,$a,"",0)); | ||
73 | |||
74 | if ($ai == $bi) | ||
75 | { &mul("eax");} | ||
76 | else | ||
77 | { &mul("edx");} | ||
78 | &add("eax","eax"); | ||
79 | ### | ||
80 | &adc("edx","edx"); | ||
81 | ### | ||
82 | &adc($c2,0); | ||
83 | &add($c0,"eax"); | ||
84 | &adc($c1,"edx"); | ||
85 | &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 0; # load next a | ||
86 | &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # load next b | ||
87 | &adc($c2,0); | ||
88 | &mov(&DWP($i*4,$r,"",0),$c0) if $pos > 0; # save r[]; | ||
89 | &mov("edx",&DWP(($nb)*4,$a,"",0)) if ($pos <= 1) && ($na != $nb); | ||
90 | ### | ||
91 | } | ||
92 | |||
93 | sub bn_mul_comba | ||
94 | { | ||
95 | local($name,$num)=@_; | ||
96 | local($a,$b,$c0,$c1,$c2); | ||
97 | local($i,$as,$ae,$bs,$be,$ai,$bi); | ||
98 | local($tot,$end); | ||
99 | |||
100 | &function_begin_B($name,""); | ||
101 | |||
102 | $c0="ebx"; | ||
103 | $c1="ecx"; | ||
104 | $c2="ebp"; | ||
105 | $a="esi"; | ||
106 | $b="edi"; | ||
107 | |||
108 | $as=0; | ||
109 | $ae=0; | ||
110 | $bs=0; | ||
111 | $be=0; | ||
112 | $tot=$num+$num-1; | ||
113 | |||
114 | &push("esi"); | ||
115 | &mov($a,&wparam(1)); | ||
116 | &push("edi"); | ||
117 | &mov($b,&wparam(2)); | ||
118 | &push("ebp"); | ||
119 | &push("ebx"); | ||
120 | |||
121 | &xor($c0,$c0); | ||
122 | &mov("eax",&DWP(0,$a,"",0)); # load the first word | ||
123 | &xor($c1,$c1); | ||
124 | &mov("edx",&DWP(0,$b,"",0)); # load the first second | ||
125 | |||
126 | for ($i=0; $i<$tot; $i++) | ||
127 | { | ||
128 | $ai=$as; | ||
129 | $bi=$bs; | ||
130 | $end=$be+1; | ||
131 | |||
132 | &comment("################## Calculate word $i"); | ||
133 | |||
134 | for ($j=$bs; $j<$end; $j++) | ||
135 | { | ||
136 | &xor($c2,$c2) if ($j == $bs); | ||
137 | if (($j+1) == $end) | ||
138 | { | ||
139 | $v=1; | ||
140 | $v=2 if (($i+1) == $tot); | ||
141 | } | ||
142 | else | ||
143 | { $v=0; } | ||
144 | if (($j+1) != $end) | ||
145 | { | ||
146 | $na=($ai-1); | ||
147 | $nb=($bi+1); | ||
148 | } | ||
149 | else | ||
150 | { | ||
151 | $na=$as+($i < ($num-1)); | ||
152 | $nb=$bs+($i >= ($num-1)); | ||
153 | } | ||
154 | #printf STDERR "[$ai,$bi] -> [$na,$nb]\n"; | ||
155 | &mul_add_c($a,$ai,$b,$bi,$c0,$c1,$c2,$v,$i,$na,$nb); | ||
156 | if ($v) | ||
157 | { | ||
158 | &comment("saved r[$i]"); | ||
159 | # &mov("eax",&wparam(0)); | ||
160 | # &mov(&DWP($i*4,"eax","",0),$c0); | ||
161 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
162 | } | ||
163 | $ai--; | ||
164 | $bi++; | ||
165 | } | ||
166 | $as++ if ($i < ($num-1)); | ||
167 | $ae++ if ($i >= ($num-1)); | ||
168 | |||
169 | $bs++ if ($i >= ($num-1)); | ||
170 | $be++ if ($i < ($num-1)); | ||
171 | } | ||
172 | &comment("save r[$i]"); | ||
173 | # &mov("eax",&wparam(0)); | ||
174 | &mov(&DWP($i*4,"eax","",0),$c0); | ||
175 | |||
176 | &pop("ebx"); | ||
177 | &pop("ebp"); | ||
178 | &pop("edi"); | ||
179 | &pop("esi"); | ||
180 | &ret(); | ||
181 | &function_end_B($name); | ||
182 | } | ||
183 | |||
184 | sub bn_sqr_comba | ||
185 | { | ||
186 | local($name,$num)=@_; | ||
187 | local($r,$a,$c0,$c1,$c2)=@_; | ||
188 | local($i,$as,$ae,$bs,$be,$ai,$bi); | ||
189 | local($b,$tot,$end,$half); | ||
190 | |||
191 | &function_begin_B($name,""); | ||
192 | |||
193 | $c0="ebx"; | ||
194 | $c1="ecx"; | ||
195 | $c2="ebp"; | ||
196 | $a="esi"; | ||
197 | $r="edi"; | ||
198 | |||
199 | &push("esi"); | ||
200 | &push("edi"); | ||
201 | &push("ebp"); | ||
202 | &push("ebx"); | ||
203 | &mov($r,&wparam(0)); | ||
204 | &mov($a,&wparam(1)); | ||
205 | &xor($c0,$c0); | ||
206 | &xor($c1,$c1); | ||
207 | &mov("eax",&DWP(0,$a,"",0)); # load the first word | ||
208 | |||
209 | $as=0; | ||
210 | $ae=0; | ||
211 | $bs=0; | ||
212 | $be=0; | ||
213 | $tot=$num+$num-1; | ||
214 | |||
215 | for ($i=0; $i<$tot; $i++) | ||
216 | { | ||
217 | $ai=$as; | ||
218 | $bi=$bs; | ||
219 | $end=$be+1; | ||
220 | |||
221 | &comment("############### Calculate word $i"); | ||
222 | for ($j=$bs; $j<$end; $j++) | ||
223 | { | ||
224 | &xor($c2,$c2) if ($j == $bs); | ||
225 | if (($ai-1) < ($bi+1)) | ||
226 | { | ||
227 | $v=1; | ||
228 | $v=2 if ($i+1) == $tot; | ||
229 | } | ||
230 | else | ||
231 | { $v=0; } | ||
232 | if (!$v) | ||
233 | { | ||
234 | $na=$ai-1; | ||
235 | $nb=$bi+1; | ||
236 | } | ||
237 | else | ||
238 | { | ||
239 | $na=$as+($i < ($num-1)); | ||
240 | $nb=$bs+($i >= ($num-1)); | ||
241 | } | ||
242 | if ($ai == $bi) | ||
243 | { | ||
244 | &sqr_add_c($r,$a,$ai,$bi, | ||
245 | $c0,$c1,$c2,$v,$i,$na,$nb); | ||
246 | } | ||
247 | else | ||
248 | { | ||
249 | &sqr_add_c2($r,$a,$ai,$bi, | ||
250 | $c0,$c1,$c2,$v,$i,$na,$nb); | ||
251 | } | ||
252 | if ($v) | ||
253 | { | ||
254 | &comment("saved r[$i]"); | ||
255 | #&mov(&DWP($i*4,$r,"",0),$c0); | ||
256 | ($c0,$c1,$c2)=($c1,$c2,$c0); | ||
257 | last; | ||
258 | } | ||
259 | $ai--; | ||
260 | $bi++; | ||
261 | } | ||
262 | $as++ if ($i < ($num-1)); | ||
263 | $ae++ if ($i >= ($num-1)); | ||
264 | |||
265 | $bs++ if ($i >= ($num-1)); | ||
266 | $be++ if ($i < ($num-1)); | ||
267 | } | ||
268 | &mov(&DWP($i*4,$r,"",0),$c0); | ||
269 | &pop("ebx"); | ||
270 | &pop("ebp"); | ||
271 | &pop("edi"); | ||
272 | &pop("esi"); | ||
273 | &ret(); | ||
274 | &function_end_B($name); | ||
275 | } | ||
276 | |||
277 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/div.pl b/src/lib/libcrypto/bn/asm/x86/div.pl new file mode 100644 index 0000000000..0e90152caa --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/div.pl | |||
@@ -0,0 +1,15 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub bn_div_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | |||
8 | &function_begin($name,""); | ||
9 | &mov("edx",&wparam(0)); # | ||
10 | &mov("eax",&wparam(1)); # | ||
11 | &mov("ebx",&wparam(2)); # | ||
12 | &div("ebx"); | ||
13 | &function_end($name); | ||
14 | } | ||
15 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/f b/src/lib/libcrypto/bn/asm/x86/f new file mode 100644 index 0000000000..22e4112224 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/f | |||
@@ -0,0 +1,3 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
diff --git a/src/lib/libcrypto/bn/asm/x86/mul.pl b/src/lib/libcrypto/bn/asm/x86/mul.pl new file mode 100644 index 0000000000..674cb9b055 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/mul.pl | |||
@@ -0,0 +1,77 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub bn_mul_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | |||
8 | &function_begin($name,""); | ||
9 | |||
10 | &comment(""); | ||
11 | $Low="eax"; | ||
12 | $High="edx"; | ||
13 | $a="ebx"; | ||
14 | $w="ecx"; | ||
15 | $r="edi"; | ||
16 | $c="esi"; | ||
17 | $num="ebp"; | ||
18 | |||
19 | &xor($c,$c); # clear carry | ||
20 | &mov($r,&wparam(0)); # | ||
21 | &mov($a,&wparam(1)); # | ||
22 | &mov($num,&wparam(2)); # | ||
23 | &mov($w,&wparam(3)); # | ||
24 | |||
25 | &and($num,0xfffffff8); # num / 8 | ||
26 | &jz(&label("mw_finish")); | ||
27 | |||
28 | &set_label("mw_loop",0); | ||
29 | for ($i=0; $i<32; $i+=4) | ||
30 | { | ||
31 | &comment("Round $i"); | ||
32 | |||
33 | &mov("eax",&DWP($i,$a,"",0)); # *a | ||
34 | &mul($w); # *a * w | ||
35 | &add("eax",$c); # L(t)+=c | ||
36 | # XXX | ||
37 | |||
38 | &adc("edx",0); # H(t)+=carry | ||
39 | &mov(&DWP($i,$r,"",0),"eax"); # *r= L(t); | ||
40 | |||
41 | &mov($c,"edx"); # c= H(t); | ||
42 | } | ||
43 | |||
44 | &comment(""); | ||
45 | &add($a,32); | ||
46 | &add($r,32); | ||
47 | &sub($num,8); | ||
48 | &jz(&label("mw_finish")); | ||
49 | &jmp(&label("mw_loop")); | ||
50 | |||
51 | &set_label("mw_finish",0); | ||
52 | &mov($num,&wparam(2)); # get num | ||
53 | &and($num,7); | ||
54 | &jnz(&label("mw_finish2")); | ||
55 | &jmp(&label("mw_end")); | ||
56 | |||
57 | &set_label("mw_finish2",1); | ||
58 | for ($i=0; $i<7; $i++) | ||
59 | { | ||
60 | &comment("Tail Round $i"); | ||
61 | &mov("eax",&DWP($i*4,$a,"",0));# *a | ||
62 | &mul($w); # *a * w | ||
63 | &add("eax",$c); # L(t)+=c | ||
64 | # XXX | ||
65 | &adc("edx",0); # H(t)+=carry | ||
66 | &mov(&DWP($i*4,$r,"",0),"eax");# *r= L(t); | ||
67 | &mov($c,"edx"); # c= H(t); | ||
68 | &dec($num) if ($i != 7-1); | ||
69 | &jz(&label("mw_end")) if ($i != 7-1); | ||
70 | } | ||
71 | &set_label("mw_end",0); | ||
72 | &mov("eax",$c); | ||
73 | |||
74 | &function_end($name); | ||
75 | } | ||
76 | |||
77 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/mul_add.pl b/src/lib/libcrypto/bn/asm/x86/mul_add.pl new file mode 100644 index 0000000000..61830d3a90 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/mul_add.pl | |||
@@ -0,0 +1,87 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub bn_mul_add_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | |||
8 | &function_begin($name,""); | ||
9 | |||
10 | &comment(""); | ||
11 | $Low="eax"; | ||
12 | $High="edx"; | ||
13 | $a="ebx"; | ||
14 | $w="ebp"; | ||
15 | $r="edi"; | ||
16 | $c="esi"; | ||
17 | |||
18 | &xor($c,$c); # clear carry | ||
19 | &mov($r,&wparam(0)); # | ||
20 | |||
21 | &mov("ecx",&wparam(2)); # | ||
22 | &mov($a,&wparam(1)); # | ||
23 | |||
24 | &and("ecx",0xfffffff8); # num / 8 | ||
25 | &mov($w,&wparam(3)); # | ||
26 | |||
27 | &push("ecx"); # Up the stack for a tmp variable | ||
28 | |||
29 | &jz(&label("maw_finish")); | ||
30 | |||
31 | &set_label("maw_loop",0); | ||
32 | |||
33 | &mov(&swtmp(0),"ecx"); # | ||
34 | |||
35 | for ($i=0; $i<32; $i+=4) | ||
36 | { | ||
37 | &comment("Round $i"); | ||
38 | |||
39 | &mov("eax",&DWP($i,$a,"",0)); # *a | ||
40 | &mul($w); # *a * w | ||
41 | &add("eax",$c); # L(t)+= *r | ||
42 | &mov($c,&DWP($i,$r,"",0)); # L(t)+= *r | ||
43 | &adc("edx",0); # H(t)+=carry | ||
44 | &add("eax",$c); # L(t)+=c | ||
45 | &adc("edx",0); # H(t)+=carry | ||
46 | &mov(&DWP($i,$r,"",0),"eax"); # *r= L(t); | ||
47 | &mov($c,"edx"); # c= H(t); | ||
48 | } | ||
49 | |||
50 | &comment(""); | ||
51 | &mov("ecx",&swtmp(0)); # | ||
52 | &add($a,32); | ||
53 | &add($r,32); | ||
54 | &sub("ecx",8); | ||
55 | &jnz(&label("maw_loop")); | ||
56 | |||
57 | &set_label("maw_finish",0); | ||
58 | &mov("ecx",&wparam(2)); # get num | ||
59 | &and("ecx",7); | ||
60 | &jnz(&label("maw_finish2")); # helps branch prediction | ||
61 | &jmp(&label("maw_end")); | ||
62 | |||
63 | &set_label("maw_finish2",1); | ||
64 | for ($i=0; $i<7; $i++) | ||
65 | { | ||
66 | &comment("Tail Round $i"); | ||
67 | &mov("eax",&DWP($i*4,$a,"",0));# *a | ||
68 | &mul($w); # *a * w | ||
69 | &add("eax",$c); # L(t)+=c | ||
70 | &mov($c,&DWP($i*4,$r,"",0)); # L(t)+= *r | ||
71 | &adc("edx",0); # H(t)+=carry | ||
72 | &add("eax",$c); | ||
73 | &adc("edx",0); # H(t)+=carry | ||
74 | &dec("ecx") if ($i != 7-1); | ||
75 | &mov(&DWP($i*4,$r,"",0),"eax"); # *r= L(t); | ||
76 | &mov($c,"edx"); # c= H(t); | ||
77 | &jz(&label("maw_end")) if ($i != 7-1); | ||
78 | } | ||
79 | &set_label("maw_end",0); | ||
80 | &mov("eax",$c); | ||
81 | |||
82 | &pop("ecx"); # clear variable from | ||
83 | |||
84 | &function_end($name); | ||
85 | } | ||
86 | |||
87 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/sqr.pl b/src/lib/libcrypto/bn/asm/x86/sqr.pl new file mode 100644 index 0000000000..1f90993cf6 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/sqr.pl | |||
@@ -0,0 +1,60 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub bn_sqr_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | |||
8 | &function_begin($name,""); | ||
9 | |||
10 | &comment(""); | ||
11 | $r="esi"; | ||
12 | $a="edi"; | ||
13 | $num="ebx"; | ||
14 | |||
15 | &mov($r,&wparam(0)); # | ||
16 | &mov($a,&wparam(1)); # | ||
17 | &mov($num,&wparam(2)); # | ||
18 | |||
19 | &and($num,0xfffffff8); # num / 8 | ||
20 | &jz(&label("sw_finish")); | ||
21 | |||
22 | &set_label("sw_loop",0); | ||
23 | for ($i=0; $i<32; $i+=4) | ||
24 | { | ||
25 | &comment("Round $i"); | ||
26 | &mov("eax",&DWP($i,$a,"",0)); # *a | ||
27 | # XXX | ||
28 | &mul("eax"); # *a * *a | ||
29 | &mov(&DWP($i*2,$r,"",0),"eax"); # | ||
30 | &mov(&DWP($i*2+4,$r,"",0),"edx");# | ||
31 | } | ||
32 | |||
33 | &comment(""); | ||
34 | &add($a,32); | ||
35 | &add($r,64); | ||
36 | &sub($num,8); | ||
37 | &jnz(&label("sw_loop")); | ||
38 | |||
39 | &set_label("sw_finish",0); | ||
40 | &mov($num,&wparam(2)); # get num | ||
41 | &and($num,7); | ||
42 | &jz(&label("sw_end")); | ||
43 | |||
44 | for ($i=0; $i<7; $i++) | ||
45 | { | ||
46 | &comment("Tail Round $i"); | ||
47 | &mov("eax",&DWP($i*4,$a,"",0)); # *a | ||
48 | # XXX | ||
49 | &mul("eax"); # *a * *a | ||
50 | &mov(&DWP($i*8,$r,"",0),"eax"); # | ||
51 | &dec($num) if ($i != 7-1); | ||
52 | &mov(&DWP($i*8+4,$r,"",0),"edx"); | ||
53 | &jz(&label("sw_end")) if ($i != 7-1); | ||
54 | } | ||
55 | &set_label("sw_end",0); | ||
56 | |||
57 | &function_end($name); | ||
58 | } | ||
59 | |||
60 | 1; | ||
diff --git a/src/lib/libcrypto/bn/asm/x86/sub.pl b/src/lib/libcrypto/bn/asm/x86/sub.pl new file mode 100644 index 0000000000..837b0e1b07 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86/sub.pl | |||
@@ -0,0 +1,76 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # x86 assember | ||
3 | |||
4 | sub bn_sub_words | ||
5 | { | ||
6 | local($name)=@_; | ||
7 | |||
8 | &function_begin($name,""); | ||
9 | |||
10 | &comment(""); | ||
11 | $a="esi"; | ||
12 | $b="edi"; | ||
13 | $c="eax"; | ||
14 | $r="ebx"; | ||
15 | $tmp1="ecx"; | ||
16 | $tmp2="edx"; | ||
17 | $num="ebp"; | ||
18 | |||
19 | &mov($r,&wparam(0)); # get r | ||
20 | &mov($a,&wparam(1)); # get a | ||
21 | &mov($b,&wparam(2)); # get b | ||
22 | &mov($num,&wparam(3)); # get num | ||
23 | &xor($c,$c); # clear carry | ||
24 | &and($num,0xfffffff8); # num / 8 | ||
25 | |||
26 | &jz(&label("aw_finish")); | ||
27 | |||
28 | &set_label("aw_loop",0); | ||
29 | for ($i=0; $i<8; $i++) | ||
30 | { | ||
31 | &comment("Round $i"); | ||
32 | |||
33 | &mov($tmp1,&DWP($i*4,$a,"",0)); # *a | ||
34 | &mov($tmp2,&DWP($i*4,$b,"",0)); # *b | ||
35 | &sub($tmp1,$c); | ||
36 | &mov($c,0); | ||
37 | &adc($c,$c); | ||
38 | &sub($tmp1,$tmp2); | ||
39 | &adc($c,0); | ||
40 | &mov(&DWP($i*4,$r,"",0),$tmp1); # *r | ||
41 | } | ||
42 | |||
43 | &comment(""); | ||
44 | &add($a,32); | ||
45 | &add($b,32); | ||
46 | &add($r,32); | ||
47 | &sub($num,8); | ||
48 | &jnz(&label("aw_loop")); | ||
49 | |||
50 | &set_label("aw_finish",0); | ||
51 | &mov($num,&wparam(3)); # get num | ||
52 | &and($num,7); | ||
53 | &jz(&label("aw_end")); | ||
54 | |||
55 | for ($i=0; $i<7; $i++) | ||
56 | { | ||
57 | &comment("Tail Round $i"); | ||
58 | &mov($tmp1,&DWP($i*4,$a,"",0)); # *a | ||
59 | &mov($tmp2,&DWP($i*4,$b,"",0));# *b | ||
60 | &sub($tmp1,$c); | ||
61 | &mov($c,0); | ||
62 | &adc($c,$c); | ||
63 | &sub($tmp1,$tmp2); | ||
64 | &adc($c,0); | ||
65 | &dec($num) if ($i != 6); | ||
66 | &mov(&DWP($i*4,$r,"",0),$tmp1); # *a | ||
67 | &jz(&label("aw_end")) if ($i != 6); | ||
68 | } | ||
69 | &set_label("aw_end",0); | ||
70 | |||
71 | # &mov("eax",$c); # $c is "eax" | ||
72 | |||
73 | &function_end($name); | ||
74 | } | ||
75 | |||
76 | 1; | ||
diff --git a/src/lib/libcrypto/bn/old/b_sqr.c b/src/lib/libcrypto/bn/old/b_sqr.c new file mode 100644 index 0000000000..715cb1c8ab --- /dev/null +++ b/src/lib/libcrypto/bn/old/b_sqr.c | |||
@@ -0,0 +1,199 @@ | |||
1 | /* crypto/bn/bn_mul.c */ | ||
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * This package is an SSL implementation written | ||
6 | * by Eric Young (eay@cryptsoft.com). | ||
7 | * The implementation was written so as to conform with Netscapes SSL. | ||
8 | * | ||
9 | * This library is free for commercial and non-commercial use as long as | ||
10 | * the following conditions are aheared to. The following conditions | ||
11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
13 | * included with this distribution is covered by the same copyright terms | ||
14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
15 | * | ||
16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
17 | * the code are not to be removed. | ||
18 | * If this package is used in a product, Eric Young should be given attribution | ||
19 | * as the author of the parts of the library used. | ||
20 | * This can be in the form of a textual message at program startup or | ||
21 | * in documentation (online or textual) provided with the package. | ||
22 | * | ||
23 | * Redistribution and use in source and binary forms, with or without | ||
24 | * modification, are permitted provided that the following conditions | ||
25 | * are met: | ||
26 | * 1. Redistributions of source code must retain the copyright | ||
27 | * notice, this list of conditions and the following disclaimer. | ||
28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
29 | * notice, this list of conditions and the following disclaimer in the | ||
30 | * documentation and/or other materials provided with the distribution. | ||
31 | * 3. All advertising materials mentioning features or use of this software | ||
32 | * must display the following acknowledgement: | ||
33 | * "This product includes cryptographic software written by | ||
34 | * Eric Young (eay@cryptsoft.com)" | ||
35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
36 | * being used are not cryptographic related :-). | ||
37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
38 | * the apps directory (application code) you must include an acknowledgement: | ||
39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
40 | * | ||
41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
51 | * SUCH DAMAGE. | ||
52 | * | ||
53 | * The licence and distribution terms for any publically available version or | ||
54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
55 | * copied and put under another distribution licence | ||
56 | * [including the GNU Public Licence.] | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include "bn_lcl.h" | ||
62 | |||
63 | static int bn_mm(BIGNUM *m,BIGNUM *A,BIGNUM *B, BIGNUM *sk,BN_CTX *ctx); | ||
64 | |||
65 | /* r must be different to a and b */ | ||
66 | /* int BN_mmul(r, a, b) */ | ||
67 | int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b) | ||
68 | { | ||
69 | BN_ULONG *ap,*bp,*rp; | ||
70 | BIGNUM *sk; | ||
71 | int i,n,ret; | ||
72 | int max,al,bl; | ||
73 | BN_CTX ctx; | ||
74 | |||
75 | bn_check_top(a); | ||
76 | bn_check_top(b); | ||
77 | |||
78 | al=a->top; | ||
79 | bl=b->top; | ||
80 | if ((al == 0) || (bl == 0)) | ||
81 | { | ||
82 | r->top=0; | ||
83 | return(1); | ||
84 | } | ||
85 | #ifdef BN_MUL_DEBUG | ||
86 | printf("BN_mul(%d,%d)\n",a->top,b->top); | ||
87 | #endif | ||
88 | |||
89 | if ( (bn_limit_bits > 0) && | ||
90 | (bl > bn_limit_num) && (al > bn_limit_num)) | ||
91 | { | ||
92 | n=(BN_num_bits_word(al|bl)-bn_limit_bits); | ||
93 | n*=2; | ||
94 | sk=(BIGNUM *)Malloc(sizeof(BIGNUM)*n); | ||
95 | memset(sk,0,sizeof(BIGNUM)*n); | ||
96 | memset(&ctx,0,sizeof(ctx)); | ||
97 | |||
98 | ret=bn_mm(r,a,b,&(sk[0]),&ctx); | ||
99 | for (i=0; i<n; i+=2) | ||
100 | { | ||
101 | BN_clear_free(&sk[i]); | ||
102 | BN_clear_free(&sk[i+1]); | ||
103 | } | ||
104 | Free(sk); | ||
105 | return(ret); | ||
106 | } | ||
107 | |||
108 | max=(al+bl); | ||
109 | if (bn_wexpand(r,max) == NULL) return(0); | ||
110 | r->top=max; | ||
111 | r->neg=a->neg^b->neg; | ||
112 | ap=a->d; | ||
113 | bp=b->d; | ||
114 | rp=r->d; | ||
115 | |||
116 | rp[al]=bn_mul_words(rp,ap,al,*(bp++)); | ||
117 | rp++; | ||
118 | for (i=1; i<bl; i++) | ||
119 | { | ||
120 | rp[al]=bn_mul_add_words(rp,ap,al,*(bp++)); | ||
121 | rp++; | ||
122 | } | ||
123 | if ((max > 0) && (r->d[max-1] == 0)) r->top--; | ||
124 | return(1); | ||
125 | } | ||
126 | |||
127 | |||
128 | #define ahal (sk[0]) | ||
129 | #define blbh (sk[1]) | ||
130 | |||
131 | /* r must be different to a and b */ | ||
132 | int bn_mm(BIGNUM *m, BIGNUM *A, BIGNUM *B, BIGNUM *sk, BN_CTX *ctx) | ||
133 | { | ||
134 | int n,num,sqr=0; | ||
135 | int an,bn; | ||
136 | BIGNUM ah,al,bh,bl; | ||
137 | |||
138 | an=A->top; | ||
139 | bn=B->top; | ||
140 | #ifdef BN_MUL_DEBUG | ||
141 | printf("bn_mm(%d,%d)\n",A->top,B->top); | ||
142 | #endif | ||
143 | |||
144 | if (A == B) sqr=1; | ||
145 | num=(an>bn)?an:bn; | ||
146 | n=(num+1)/2; | ||
147 | /* Are going to now chop things into 'num' word chunks. */ | ||
148 | |||
149 | BN_init(&ah); | ||
150 | BN_init(&al); | ||
151 | BN_init(&bh); | ||
152 | BN_init(&bl); | ||
153 | |||
154 | bn_set_low (&al,A,n); | ||
155 | bn_set_high(&ah,A,n); | ||
156 | bn_set_low (&bl,B,n); | ||
157 | bn_set_high(&bh,B,n); | ||
158 | |||
159 | BN_sub(&ahal,&ah,&al); | ||
160 | BN_sub(&blbh,&bl,&bh); | ||
161 | |||
162 | if (num <= (bn_limit_num+bn_limit_num)) | ||
163 | { | ||
164 | BN_mul(m,&ahal,&blbh); | ||
165 | if (sqr) | ||
166 | { | ||
167 | BN_sqr(&ahal,&al,ctx); | ||
168 | BN_sqr(&blbh,&ah,ctx); | ||
169 | } | ||
170 | else | ||
171 | { | ||
172 | BN_mul(&ahal,&al,&bl); | ||
173 | BN_mul(&blbh,&ah,&bh); | ||
174 | } | ||
175 | } | ||
176 | else | ||
177 | { | ||
178 | bn_mm(m,&ahal,&blbh,&(sk[2]),ctx); | ||
179 | bn_mm(&ahal,&al,&bl,&(sk[2]),ctx); | ||
180 | bn_mm(&blbh,&ah,&bh,&(sk[2]),ctx); | ||
181 | } | ||
182 | |||
183 | BN_add(m,m,&ahal); | ||
184 | BN_add(m,m,&blbh); | ||
185 | |||
186 | BN_lshift(m,m,n*BN_BITS2); | ||
187 | BN_lshift(&blbh,&blbh,n*BN_BITS2*2); | ||
188 | |||
189 | BN_add(m,m,&ahal); | ||
190 | BN_add(m,m,&blbh); | ||
191 | |||
192 | m->neg=A->neg^B->neg; | ||
193 | return(1); | ||
194 | } | ||
195 | #undef ahal (sk[0]) | ||
196 | #undef blbh (sk[1]) | ||
197 | |||
198 | #include "bn_low.c" | ||
199 | #include "bn_high.c" | ||
diff --git a/src/lib/libcrypto/bn/old/bn_com.c b/src/lib/libcrypto/bn/old/bn_com.c new file mode 100644 index 0000000000..7666b2304c --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_com.c | |||
@@ -0,0 +1,90 @@ | |||
1 | /* crypto/bn/bn_mulw.c */ | ||
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * This package is an SSL implementation written | ||
6 | * by Eric Young (eay@cryptsoft.com). | ||
7 | * The implementation was written so as to conform with Netscapes SSL. | ||
8 | * | ||
9 | * This library is free for commercial and non-commercial use as long as | ||
10 | * the following conditions are aheared to. The following conditions | ||
11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
13 | * included with this distribution is covered by the same copyright terms | ||
14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
15 | * | ||
16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
17 | * the code are not to be removed. | ||
18 | * If this package is used in a product, Eric Young should be given attribution | ||
19 | * as the author of the parts of the library used. | ||
20 | * This can be in the form of a textual message at program startup or | ||
21 | * in documentation (online or textual) provided with the package. | ||
22 | * | ||
23 | * Redistribution and use in source and binary forms, with or without | ||
24 | * modification, are permitted provided that the following conditions | ||
25 | * are met: | ||
26 | * 1. Redistributions of source code must retain the copyright | ||
27 | * notice, this list of conditions and the following disclaimer. | ||
28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
29 | * notice, this list of conditions and the following disclaimer in the | ||
30 | * documentation and/or other materials provided with the distribution. | ||
31 | * 3. All advertising materials mentioning features or use of this software | ||
32 | * must display the following acknowledgement: | ||
33 | * "This product includes cryptographic software written by | ||
34 | * Eric Young (eay@cryptsoft.com)" | ||
35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
36 | * being used are not cryptographic related :-). | ||
37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
38 | * the apps directory (application code) you must include an acknowledgement: | ||
39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
40 | * | ||
41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
51 | * SUCH DAMAGE. | ||
52 | * | ||
53 | * The licence and distribution terms for any publically available version or | ||
54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
55 | * copied and put under another distribution licence | ||
56 | * [including the GNU Public Licence.] | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include "bn_lcl.h" | ||
62 | |||
63 | #ifdef BN_LLONG | ||
64 | |||
65 | ab | ||
66 | 12 | ||
67 | a2 b2 | ||
68 | a1 b1 | ||
69 | |||
70 | abc | ||
71 | 123 | ||
72 | a3 b3 c3 | ||
73 | a2 b2 c2 | ||
74 | a1 b1 c1 | ||
75 | |||
76 | abcd | ||
77 | 1234 | ||
78 | a4 b4 c4 d4 | ||
79 | a3 b3 c3 d3 | ||
80 | a2 b2 c2 d2 | ||
81 | a1 b1 c1 d1 | ||
82 | |||
83 | abcde | ||
84 | 01234 | ||
85 | a5 b5 c5 d5 e5 | ||
86 | a4 b4 c4 d4 e4 | ||
87 | a3 b3 c3 d3 e3 | ||
88 | a2 b2 c2 d2 e2 | ||
89 | a1 b1 c1 d1 e1 | ||
90 | a0 b0 c0 d0 e0 | ||
diff --git a/src/lib/libcrypto/bn/old/bn_high.c b/src/lib/libcrypto/bn/old/bn_high.c new file mode 100644 index 0000000000..763bcb605b --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_high.c | |||
@@ -0,0 +1,135 @@ | |||
1 | #include <stdio.h> | ||
2 | #include "cryptlib.h" | ||
3 | #include "bn_lcl.h" | ||
4 | |||
5 | #undef BN_MUL_HIGH_DEBUG | ||
6 | |||
7 | #ifdef BN_MUL_HIGH_DEBUG | ||
8 | #define debug_BN_print(a,b,c) BN_print_fp(a,b); printf(c); | ||
9 | #else | ||
10 | #define debug_BN_print(a,b,c) | ||
11 | #endif | ||
12 | |||
13 | int BN_mul_high(BIGNUM *r,BIGNUM *a,BIGNUM *b,BIGNUM *low, int words); | ||
14 | |||
15 | #undef t1 | ||
16 | #undef t2 | ||
17 | |||
18 | int BN_mul_high(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *low, int words) | ||
19 | { | ||
20 | int w2,borrow=0,full=0; | ||
21 | BIGNUM t1,t2,t3,h,ah,al,bh,bl,m,s0,s1; | ||
22 | BN_ULONG ul1,ul2; | ||
23 | |||
24 | BN_mul(r,a,b); | ||
25 | BN_rshift(r,r,words*BN_BITS2); | ||
26 | return(1); | ||
27 | |||
28 | w2=(words+1)/2; | ||
29 | |||
30 | #ifdef BN_MUL_HIGH_DEBUG | ||
31 | fprintf(stdout,"words=%d w2=%d\n",words,w2); | ||
32 | #endif | ||
33 | debug_BN_print(stdout,a," a\n"); | ||
34 | debug_BN_print(stdout,b," b\n"); | ||
35 | debug_BN_print(stdout,low," low\n"); | ||
36 | BN_init(&al); BN_init(&ah); | ||
37 | BN_init(&bl); BN_init(&bh); | ||
38 | BN_init(&t1); BN_init(&t2); BN_init(&t3); | ||
39 | BN_init(&s0); BN_init(&s1); | ||
40 | BN_init(&h); BN_init(&m); | ||
41 | |||
42 | bn_set_low (&al,a,w2); | ||
43 | bn_set_high(&ah,a,w2); | ||
44 | bn_set_low (&bl,b,w2); | ||
45 | bn_set_high(&bh,b,w2); | ||
46 | |||
47 | bn_set_low(&s0,low,w2); | ||
48 | bn_set_high(&s1,low,w2); | ||
49 | |||
50 | debug_BN_print(stdout,&al," al\n"); | ||
51 | debug_BN_print(stdout,&ah," ah\n"); | ||
52 | debug_BN_print(stdout,&bl," bl\n"); | ||
53 | debug_BN_print(stdout,&bh," bh\n"); | ||
54 | debug_BN_print(stdout,&s0," s0\n"); | ||
55 | debug_BN_print(stdout,&s1," s1\n"); | ||
56 | |||
57 | /* Calculate (al-ah)*(bh-bl) */ | ||
58 | BN_sub(&t1,&al,&ah); | ||
59 | BN_sub(&t2,&bh,&bl); | ||
60 | BN_mul(&m,&t1,&t2); | ||
61 | |||
62 | /* Calculate ah*bh */ | ||
63 | BN_mul(&h,&ah,&bh); | ||
64 | |||
65 | /* s0 == low(al*bl) | ||
66 | * s1 == low(ah*bh)+low((al-ah)*(bh-bl))+low(al*bl)+high(al*bl) | ||
67 | * We know s0 and s1 so the only unknown is high(al*bl) | ||
68 | * high(al*bl) == s1 - low(ah*bh+(al-ah)*(bh-bl)+s0) | ||
69 | */ | ||
70 | BN_add(&m,&m,&h); | ||
71 | BN_add(&t2,&m,&s0); | ||
72 | |||
73 | debug_BN_print(stdout,&t2," middle value\n"); | ||
74 | |||
75 | /* Quick and dirty mask off of high words */ | ||
76 | if (w2 < t2.top) t2.top=w2; | ||
77 | #if 0 | ||
78 | bn_set_low(&t3,&t2,w2); | ||
79 | #endif | ||
80 | |||
81 | debug_BN_print(stdout,&t2," low middle value\n"); | ||
82 | BN_sub(&t1,&s1,&t2); | ||
83 | |||
84 | if (t1.neg) | ||
85 | { | ||
86 | debug_BN_print(stdout,&t1," before\n"); | ||
87 | BN_zero(&t2); | ||
88 | BN_set_bit(&t2,w2*BN_BITS2); | ||
89 | BN_add(&t1,&t2,&t1); | ||
90 | /* BN_mask_bits(&t1,w2*BN_BITS2); */ | ||
91 | /* if (words < t1.top) t1.top=words; */ | ||
92 | debug_BN_print(stdout,&t1," after\n"); | ||
93 | borrow=1; | ||
94 | } | ||
95 | |||
96 | /* XXXXX SPEED THIS UP */ | ||
97 | /* al*bl == high(al*bl)<<words+s0 */ | ||
98 | BN_lshift(&t1,&t1,w2*BN_BITS2); | ||
99 | BN_add(&t1,&t1,&s0); | ||
100 | if (w2*2 < t1.top) t1.top=w2*2; /* This should not happen? */ | ||
101 | |||
102 | /* We now have | ||
103 | * al*bl - t1 | ||
104 | * (al-ah)*(bh-bl)+ah*bh - m | ||
105 | * ah*bh - h | ||
106 | */ | ||
107 | #if 0 | ||
108 | BN_add(&m,&m,&t1); | ||
109 | debug_BN_print(stdout,&t1," s10\n"); | ||
110 | debug_BN_print(stdout,&m," s21\n"); | ||
111 | debug_BN_print(stdout,&h," s32\n"); | ||
112 | BN_lshift(&m,&m,w2*BN_BITS2); | ||
113 | BN_lshift(&h,&h,w2*2*BN_BITS2); | ||
114 | BN_add(r,&m,&t1); | ||
115 | BN_add(r,r,&h); | ||
116 | BN_rshift(r,r,w2*2*BN_BITS2); | ||
117 | #else | ||
118 | BN_add(&m,&m,&t1); /* Do a cmp then +1 if needed? */ | ||
119 | bn_set_high(&t3,&t1,w2); | ||
120 | BN_add(&m,&m,&t3); | ||
121 | bn_set_high(&t3,&m,w2); | ||
122 | BN_add(r,&h,&t3); | ||
123 | #endif | ||
124 | |||
125 | #ifdef BN_MUL_HIGH_DEBUG | ||
126 | printf("carry=%d\n",borrow); | ||
127 | #endif | ||
128 | debug_BN_print(stdout,r," ret\n"); | ||
129 | BN_free(&t1); BN_free(&t2); | ||
130 | BN_free(&m); BN_free(&h); | ||
131 | return(1); | ||
132 | } | ||
133 | |||
134 | |||
135 | |||
diff --git a/src/lib/libcrypto/bn/old/bn_ka.c b/src/lib/libcrypto/bn/old/bn_ka.c new file mode 100644 index 0000000000..378c94dc5a --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_ka.c | |||
@@ -0,0 +1,567 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <strings.h> | ||
4 | #include "bn_lcl.h" | ||
5 | |||
6 | /* r is 2*n2 words in size, | ||
7 | * a and b are both n2 words in size. | ||
8 | * n2 must be a power of 2. | ||
9 | * We multiply and return the result. | ||
10 | * t must be 2*n2 words in size | ||
11 | * We calulate | ||
12 | * a[0]*b[0] | ||
13 | * a[0]*b[0]+a[1]*b[1]+(a[0]-a[1])*(b[1]-b[0]) | ||
14 | * a[1]*b[1] | ||
15 | */ | ||
16 | void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2, | ||
17 | BN_ULONG *t) | ||
18 | { | ||
19 | int n=n2/2; | ||
20 | int neg,zero,c1,c2; | ||
21 | BN_ULONG ln,lo,*p; | ||
22 | |||
23 | #ifdef BN_COUNT | ||
24 | printf(" bn_mul_recursive %d * %d\n",n2,n2); | ||
25 | #endif | ||
26 | if (n2 <= 8) | ||
27 | { | ||
28 | if (n2 == 8) | ||
29 | bn_mul_comba8(r,a,b); | ||
30 | else | ||
31 | bn_mul_normal(r,a,n2,b,n2); | ||
32 | return; | ||
33 | } | ||
34 | |||
35 | if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL) | ||
36 | { | ||
37 | /* This should not happen */ | ||
38 | /*abort(); */ | ||
39 | bn_mul_normal(r,a,n2,b,n2); | ||
40 | return; | ||
41 | } | ||
42 | /* r=(a[0]-a[1])*(b[1]-b[0]) */ | ||
43 | c1=bn_cmp_words(a,&(a[n]),n); | ||
44 | c2=bn_cmp_words(&(b[n]),b,n); | ||
45 | zero=neg=0; | ||
46 | switch (c1*3+c2) | ||
47 | { | ||
48 | case -4: | ||
49 | bn_sub_words(t, &(a[n]),a, n); /* - */ | ||
50 | bn_sub_words(&(t[n]),b, &(b[n]),n); /* - */ | ||
51 | break; | ||
52 | case -3: | ||
53 | zero=1; | ||
54 | break; | ||
55 | case -2: | ||
56 | bn_sub_words(t, &(a[n]),a, n); /* - */ | ||
57 | bn_sub_words(&(t[n]),&(b[n]),b, n); /* + */ | ||
58 | neg=1; | ||
59 | break; | ||
60 | case -1: | ||
61 | case 0: | ||
62 | case 1: | ||
63 | zero=1; | ||
64 | break; | ||
65 | case 2: | ||
66 | bn_sub_words(t, a, &(a[n]),n); /* + */ | ||
67 | bn_sub_words(&(t[n]),b, &(b[n]),n); /* - */ | ||
68 | neg=1; | ||
69 | break; | ||
70 | case 3: | ||
71 | zero=1; | ||
72 | break; | ||
73 | case 4: | ||
74 | bn_sub_words(t, a, &(a[n]),n); | ||
75 | bn_sub_words(&(t[n]),&(b[n]),b, n); | ||
76 | break; | ||
77 | } | ||
78 | |||
79 | if (n == 8) | ||
80 | { | ||
81 | if (!zero) | ||
82 | bn_mul_comba8(&(t[n2]),t,&(t[n])); | ||
83 | else | ||
84 | memset(&(t[n2]),0,8*sizeof(BN_ULONG)); | ||
85 | |||
86 | bn_mul_comba8(r,a,b); | ||
87 | bn_mul_comba8(&(r[n2]),&(a[n]),&(b[n])); | ||
88 | } | ||
89 | else | ||
90 | { | ||
91 | p= &(t[n2*2]); | ||
92 | if (!zero) | ||
93 | bn_mul_recursive(&(t[n2]),t,&(t[n]),n,p); | ||
94 | else | ||
95 | memset(&(t[n2]),0,n*sizeof(BN_ULONG)); | ||
96 | bn_mul_recursive(r,a,b,n,p); | ||
97 | bn_mul_recursive(&(r[n2]),&(a[n]),&(b[n]),n,p); | ||
98 | } | ||
99 | |||
100 | /* t[32] holds (a[0]-a[1])*(b[1]-b[0]), c1 is the sign | ||
101 | * r[10] holds (a[0]*b[0]) | ||
102 | * r[32] holds (b[1]*b[1]) | ||
103 | */ | ||
104 | |||
105 | c1=bn_add_words(t,r,&(r[n2]),n2); | ||
106 | |||
107 | if (neg) /* if t[32] is negative */ | ||
108 | { | ||
109 | c1-=bn_sub_words(&(t[n2]),t,&(t[n2]),n2); | ||
110 | } | ||
111 | else | ||
112 | { | ||
113 | /* Might have a carry */ | ||
114 | c1+=bn_add_words(&(t[n2]),&(t[n2]),t,n2); | ||
115 | } | ||
116 | |||
117 | /* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1]) | ||
118 | * r[10] holds (a[0]*b[0]) | ||
119 | * r[32] holds (b[1]*b[1]) | ||
120 | * c1 holds the carry bits | ||
121 | */ | ||
122 | c1+=bn_add_words(&(r[n]),&(r[n]),&(t[n2]),n2); | ||
123 | if (c1) | ||
124 | { | ||
125 | p= &(r[n+n2]); | ||
126 | lo= *p; | ||
127 | ln=(lo+c1)&BN_MASK2; | ||
128 | *p=ln; | ||
129 | |||
130 | /* The overflow will stop before we over write | ||
131 | * words we should not overwrite */ | ||
132 | if (ln < c1) | ||
133 | { | ||
134 | do { | ||
135 | p++; | ||
136 | lo= *p; | ||
137 | ln=(lo+1)&BN_MASK2; | ||
138 | *p=ln; | ||
139 | } while (ln == 0); | ||
140 | } | ||
141 | } | ||
142 | } | ||
143 | |||
144 | /* n+tn is the word length | ||
145 | * t needs to be n*4 is size, as does r */ | ||
146 | void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int tn, | ||
147 | int n, BN_ULONG *t) | ||
148 | { | ||
149 | int n2=n*2,i,j; | ||
150 | int c1; | ||
151 | BN_ULONG ln,lo,*p; | ||
152 | |||
153 | #ifdef BN_COUNT | ||
154 | printf(" bn_mul_part_recursive %d * %d\n",tn+n,tn+n); | ||
155 | #endif | ||
156 | if (n < 8) | ||
157 | { | ||
158 | i=tn+n; | ||
159 | bn_mul_normal(r,a,i,b,i); | ||
160 | return; | ||
161 | } | ||
162 | |||
163 | /* r=(a[0]-a[1])*(b[1]-b[0]) */ | ||
164 | bn_sub_words(t, a, &(a[n]),n); /* + */ | ||
165 | bn_sub_words(&(t[n]),b, &(b[n]),n); /* - */ | ||
166 | |||
167 | if (n == 8) | ||
168 | { | ||
169 | bn_mul_comba8(&(t[n2]),t,&(t[n])); | ||
170 | bn_mul_comba8(r,a,b); | ||
171 | bn_mul_normal(&(r[n2]),&(a[n]),tn,&(b[n]),tn); | ||
172 | memset(&(r[n2+tn*2]),0,sizeof(BN_ULONG)*(n2-tn*2)); | ||
173 | } | ||
174 | else | ||
175 | { | ||
176 | p= &(t[n2*2]); | ||
177 | bn_mul_recursive(&(t[n2]),t,&(t[n]),n,p); | ||
178 | bn_mul_recursive(r,a,b,n,p); | ||
179 | i=n/2; | ||
180 | /* If there is only a bottom half to the number, | ||
181 | * just do it */ | ||
182 | j=tn-i; | ||
183 | if (j == 0) | ||
184 | { | ||
185 | bn_mul_recursive(&(r[n2]),&(a[n]),&(b[n]),i,p); | ||
186 | memset(&(r[n2+i*2]),0,sizeof(BN_ULONG)*(n2-i*2)); | ||
187 | } | ||
188 | else if (j > 0) /* eg, n == 16, i == 8 and tn == 11 */ | ||
189 | { | ||
190 | bn_mul_part_recursive(&(r[n2]),&(a[n]),&(b[n]), | ||
191 | j,i,p); | ||
192 | memset(&(r[n2+tn*2]),0, | ||
193 | sizeof(BN_ULONG)*(n2-tn*2)); | ||
194 | } | ||
195 | else /* (j < 0) eg, n == 16, i == 8 and tn == 5 */ | ||
196 | { | ||
197 | memset(&(r[n2]),0,sizeof(BN_ULONG)*(tn*2)); | ||
198 | for (;;) | ||
199 | { | ||
200 | i/=2; | ||
201 | if (i < tn) | ||
202 | { | ||
203 | bn_mul_part_recursive(&(r[n2]), | ||
204 | &(a[n]),&(b[n]), | ||
205 | tn-i,i,p); | ||
206 | break; | ||
207 | } | ||
208 | else if (i == tn) | ||
209 | { | ||
210 | bn_mul_recursive(&(r[n2]), | ||
211 | &(a[n]),&(b[n]), | ||
212 | i,p); | ||
213 | break; | ||
214 | } | ||
215 | } | ||
216 | } | ||
217 | } | ||
218 | |||
219 | /* t[32] holds (a[0]-a[1])*(b[1]-b[0]), c1 is the sign | ||
220 | * r[10] holds (a[0]*b[0]) | ||
221 | * r[32] holds (b[1]*b[1]) | ||
222 | */ | ||
223 | |||
224 | c1=bn_add_words(t,r,&(r[n2]),n2); | ||
225 | c1-=bn_sub_words(&(t[n2]),t,&(t[n2]),n2); | ||
226 | |||
227 | /* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1]) | ||
228 | * r[10] holds (a[0]*b[0]) | ||
229 | * r[32] holds (b[1]*b[1]) | ||
230 | * c1 holds the carry bits | ||
231 | */ | ||
232 | c1+=bn_add_words(&(r[n]),&(r[n]),&(t[n2]),n2); | ||
233 | if (c1) | ||
234 | { | ||
235 | p= &(r[n+n2]); | ||
236 | lo= *p; | ||
237 | ln=(lo+c1)&BN_MASK2; | ||
238 | *p=ln; | ||
239 | |||
240 | /* The overflow will stop before we over write | ||
241 | * words we should not overwrite */ | ||
242 | if (ln < c1) | ||
243 | { | ||
244 | do { | ||
245 | p++; | ||
246 | lo= *p; | ||
247 | ln=(lo+1)&BN_MASK2; | ||
248 | *p=ln; | ||
249 | } while (ln == 0); | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | |||
254 | /* r is 2*n words in size, | ||
255 | * a and b are both n words in size. | ||
256 | * n must be a power of 2. | ||
257 | * We multiply and return the result. | ||
258 | * t must be 2*n words in size | ||
259 | * We calulate | ||
260 | * a[0]*b[0] | ||
261 | * a[0]*b[0]+a[1]*b[1]+(a[0]-a[1])*(b[1]-b[0]) | ||
262 | * a[1]*b[1] | ||
263 | */ | ||
264 | void bn_sqr_recursive(BN_ULONG *r, BN_ULONG *a, int n2, BN_ULONG *t) | ||
265 | { | ||
266 | int n=n2/2; | ||
267 | int zero,c1; | ||
268 | BN_ULONG ln,lo,*p; | ||
269 | |||
270 | #ifdef BN_COUNT | ||
271 | printf(" bn_sqr_recursive %d * %d\n",n2,n2); | ||
272 | #endif | ||
273 | if (n2 == 4) | ||
274 | { | ||
275 | bn_sqr_comba4(r,a); | ||
276 | return; | ||
277 | } | ||
278 | else if (n2 == 8) | ||
279 | { | ||
280 | bn_sqr_comba8(r,a); | ||
281 | return; | ||
282 | } | ||
283 | if (n2 < BN_SQR_RECURSIVE_SIZE_NORMAL) | ||
284 | { | ||
285 | bn_sqr_normal(r,a,n2,t); | ||
286 | return; | ||
287 | abort(); | ||
288 | } | ||
289 | /* r=(a[0]-a[1])*(a[1]-a[0]) */ | ||
290 | c1=bn_cmp_words(a,&(a[n]),n); | ||
291 | zero=0; | ||
292 | if (c1 > 0) | ||
293 | bn_sub_words(t,a,&(a[n]),n); | ||
294 | else if (c1 < 0) | ||
295 | bn_sub_words(t,&(a[n]),a,n); | ||
296 | else | ||
297 | zero=1; | ||
298 | |||
299 | /* The result will always be negative unless it is zero */ | ||
300 | |||
301 | if (n == 8) | ||
302 | { | ||
303 | if (!zero) | ||
304 | bn_sqr_comba8(&(t[n2]),t); | ||
305 | else | ||
306 | memset(&(t[n2]),0,8*sizeof(BN_ULONG)); | ||
307 | |||
308 | bn_sqr_comba8(r,a); | ||
309 | bn_sqr_comba8(&(r[n2]),&(a[n])); | ||
310 | } | ||
311 | else | ||
312 | { | ||
313 | p= &(t[n2*2]); | ||
314 | if (!zero) | ||
315 | bn_sqr_recursive(&(t[n2]),t,n,p); | ||
316 | else | ||
317 | memset(&(t[n2]),0,n*sizeof(BN_ULONG)); | ||
318 | bn_sqr_recursive(r,a,n,p); | ||
319 | bn_sqr_recursive(&(r[n2]),&(a[n]),n,p); | ||
320 | } | ||
321 | |||
322 | /* t[32] holds (a[0]-a[1])*(a[1]-a[0]), it is negative or zero | ||
323 | * r[10] holds (a[0]*b[0]) | ||
324 | * r[32] holds (b[1]*b[1]) | ||
325 | */ | ||
326 | |||
327 | c1=bn_add_words(t,r,&(r[n2]),n2); | ||
328 | |||
329 | /* t[32] is negative */ | ||
330 | c1-=bn_sub_words(&(t[n2]),t,&(t[n2]),n2); | ||
331 | |||
332 | /* t[32] holds (a[0]-a[1])*(a[1]-a[0])+(a[0]*a[0])+(a[1]*a[1]) | ||
333 | * r[10] holds (a[0]*a[0]) | ||
334 | * r[32] holds (a[1]*a[1]) | ||
335 | * c1 holds the carry bits | ||
336 | */ | ||
337 | c1+=bn_add_words(&(r[n]),&(r[n]),&(t[n2]),n2); | ||
338 | if (c1) | ||
339 | { | ||
340 | p= &(r[n+n2]); | ||
341 | lo= *p; | ||
342 | ln=(lo+c1)&BN_MASK2; | ||
343 | *p=ln; | ||
344 | |||
345 | /* The overflow will stop before we over write | ||
346 | * words we should not overwrite */ | ||
347 | if (ln < c1) | ||
348 | { | ||
349 | do { | ||
350 | p++; | ||
351 | lo= *p; | ||
352 | ln=(lo+1)&BN_MASK2; | ||
353 | *p=ln; | ||
354 | } while (ln == 0); | ||
355 | } | ||
356 | } | ||
357 | } | ||
358 | |||
359 | #if 1 | ||
360 | /* a and b must be the same size, which is n2. | ||
361 | * r needs to be n2 words and t needs to be n2*2 | ||
362 | */ | ||
363 | void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2, | ||
364 | BN_ULONG *t) | ||
365 | { | ||
366 | int n=n2/2; | ||
367 | |||
368 | #ifdef BN_COUNT | ||
369 | printf(" bn_mul_low_recursive %d * %d\n",n2,n2); | ||
370 | #endif | ||
371 | |||
372 | bn_mul_recursive(r,a,b,n,&(t[0])); | ||
373 | if (n > BN_MUL_LOW_RECURSIVE_SIZE_NORMAL) | ||
374 | { | ||
375 | bn_mul_low_recursive(&(t[0]),&(a[0]),&(b[n]),n,&(t[n2])); | ||
376 | bn_add_words(&(r[n]),&(r[n]),&(t[0]),n); | ||
377 | bn_mul_low_recursive(&(t[0]),&(a[n]),&(b[0]),n,&(t[n2])); | ||
378 | bn_add_words(&(r[n]),&(r[n]),&(t[0]),n); | ||
379 | } | ||
380 | else | ||
381 | { | ||
382 | bn_mul_low_normal(&(t[0]),&(a[0]),&(b[n]),n); | ||
383 | bn_mul_low_normal(&(t[n]),&(a[n]),&(b[0]),n); | ||
384 | bn_add_words(&(r[n]),&(r[n]),&(t[0]),n); | ||
385 | bn_add_words(&(r[n]),&(r[n]),&(t[n]),n); | ||
386 | } | ||
387 | } | ||
388 | |||
389 | /* a and b must be the same size, which is n2. | ||
390 | * r needs to be n2 words and t needs to be n2*2 | ||
391 | * l is the low words of the output. | ||
392 | * t needs to be n2*3 | ||
393 | */ | ||
394 | void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l, int n2, | ||
395 | BN_ULONG *t) | ||
396 | { | ||
397 | int j,i,n,c1,c2; | ||
398 | int neg,oneg,zero; | ||
399 | BN_ULONG ll,lc,*lp,*mp; | ||
400 | |||
401 | #ifdef BN_COUNT | ||
402 | printf(" bn_mul_high %d * %d\n",n2,n2); | ||
403 | #endif | ||
404 | n=(n2+1)/2; | ||
405 | |||
406 | /* Calculate (al-ah)*(bh-bl) */ | ||
407 | neg=zero=0; | ||
408 | c1=bn_cmp_words(&(a[0]),&(a[n]),n); | ||
409 | c2=bn_cmp_words(&(b[n]),&(b[0]),n); | ||
410 | switch (c1*3+c2) | ||
411 | { | ||
412 | case -4: | ||
413 | bn_sub_words(&(r[0]),&(a[n]),&(a[0]),n); | ||
414 | bn_sub_words(&(r[n]),&(b[0]),&(b[n]),n); | ||
415 | break; | ||
416 | case -3: | ||
417 | zero=1; | ||
418 | break; | ||
419 | case -2: | ||
420 | bn_sub_words(&(r[0]),&(a[n]),&(a[0]),n); | ||
421 | bn_sub_words(&(r[n]),&(b[n]),&(b[0]),n); | ||
422 | neg=1; | ||
423 | break; | ||
424 | case -1: | ||
425 | case 0: | ||
426 | case 1: | ||
427 | zero=1; | ||
428 | break; | ||
429 | case 2: | ||
430 | bn_sub_words(&(r[0]),&(a[0]),&(a[n]),n); | ||
431 | bn_sub_words(&(r[n]),&(b[0]),&(b[n]),n); | ||
432 | neg=1; | ||
433 | break; | ||
434 | case 3: | ||
435 | zero=1; | ||
436 | break; | ||
437 | case 4: | ||
438 | bn_sub_words(&(r[0]),&(a[0]),&(a[n]),n); | ||
439 | bn_sub_words(&(r[n]),&(b[n]),&(b[0]),n); | ||
440 | break; | ||
441 | } | ||
442 | |||
443 | oneg=neg; | ||
444 | /* t[10] = (a[0]-a[1])*(b[1]-b[0]) */ | ||
445 | bn_mul_recursive(&(t[0]),&(r[0]),&(r[n]),n,&(t[n2])); | ||
446 | /* r[10] = (a[1]*b[1]) */ | ||
447 | bn_mul_recursive(r,&(a[n]),&(b[n]),n,&(t[n2])); | ||
448 | |||
449 | /* s0 == low(al*bl) | ||
450 | * s1 == low(ah*bh)+low((al-ah)*(bh-bl))+low(al*bl)+high(al*bl) | ||
451 | * We know s0 and s1 so the only unknown is high(al*bl) | ||
452 | * high(al*bl) == s1 - low(ah*bh+s0+(al-ah)*(bh-bl)) | ||
453 | * high(al*bl) == s1 - (r[0]+l[0]+t[0]) | ||
454 | */ | ||
455 | if (l != NULL) | ||
456 | { | ||
457 | lp= &(t[n2+n]); | ||
458 | c1=bn_add_words(lp,&(r[0]),&(l[0]),n); | ||
459 | } | ||
460 | else | ||
461 | { | ||
462 | c1=0; | ||
463 | lp= &(r[0]); | ||
464 | } | ||
465 | |||
466 | if (neg) | ||
467 | neg=bn_sub_words(&(t[n2]),lp,&(t[0]),n); | ||
468 | else | ||
469 | { | ||
470 | bn_add_words(&(t[n2]),lp,&(t[0]),n); | ||
471 | neg=0; | ||
472 | } | ||
473 | |||
474 | if (l != NULL) | ||
475 | { | ||
476 | bn_sub_words(&(t[n2+n]),&(l[n]),&(t[n2]),n); | ||
477 | } | ||
478 | else | ||
479 | { | ||
480 | lp= &(t[n2+n]); | ||
481 | mp= &(t[n2]); | ||
482 | for (i=0; i<n; i++) | ||
483 | lp[i]=((~mp[i])+1)&BN_MASK2; | ||
484 | } | ||
485 | |||
486 | /* s[0] = low(al*bl) | ||
487 | * t[3] = high(al*bl) | ||
488 | * t[10] = (a[0]-a[1])*(b[1]-b[0]) neg is the sign | ||
489 | * r[10] = (a[1]*b[1]) | ||
490 | */ | ||
491 | /* R[10] = al*bl | ||
492 | * R[21] = al*bl + ah*bh + (a[0]-a[1])*(b[1]-b[0]) | ||
493 | * R[32] = ah*bh | ||
494 | */ | ||
495 | /* R[1]=t[3]+l[0]+r[0](+-)t[0] (have carry/borrow) | ||
496 | * R[2]=r[0]+t[3]+r[1](+-)t[1] (have carry/borrow) | ||
497 | * R[3]=r[1]+(carry/borrow) | ||
498 | */ | ||
499 | if (l != NULL) | ||
500 | { | ||
501 | lp= &(t[n2]); | ||
502 | c1= bn_add_words(lp,&(t[n2+n]),&(l[0]),n); | ||
503 | } | ||
504 | else | ||
505 | { | ||
506 | lp= &(t[n2+n]); | ||
507 | c1=0; | ||
508 | } | ||
509 | c1+=bn_add_words(&(t[n2]),lp, &(r[0]),n); | ||
510 | if (oneg) | ||
511 | c1-=bn_sub_words(&(t[n2]),&(t[n2]),&(t[0]),n); | ||
512 | else | ||
513 | c1+=bn_add_words(&(t[n2]),&(t[n2]),&(t[0]),n); | ||
514 | |||
515 | c2 =bn_add_words(&(r[0]),&(r[0]),&(t[n2+n]),n); | ||
516 | c2+=bn_add_words(&(r[0]),&(r[0]),&(r[n]),n); | ||
517 | if (oneg) | ||
518 | c2-=bn_sub_words(&(r[0]),&(r[0]),&(t[n]),n); | ||
519 | else | ||
520 | c2+=bn_add_words(&(r[0]),&(r[0]),&(t[n]),n); | ||
521 | |||
522 | if (c1 != 0) /* Add starting at r[0], could be +ve or -ve */ | ||
523 | { | ||
524 | i=0; | ||
525 | if (c1 > 0) | ||
526 | { | ||
527 | lc=c1; | ||
528 | do { | ||
529 | ll=(r[i]+lc)&BN_MASK2; | ||
530 | r[i++]=ll; | ||
531 | lc=(lc > ll); | ||
532 | } while (lc); | ||
533 | } | ||
534 | else | ||
535 | { | ||
536 | lc= -c1; | ||
537 | do { | ||
538 | ll=r[i]; | ||
539 | r[i++]=(ll-lc)&BN_MASK2; | ||
540 | lc=(lc > ll); | ||
541 | } while (lc); | ||
542 | } | ||
543 | } | ||
544 | if (c2 != 0) /* Add starting at r[1] */ | ||
545 | { | ||
546 | i=n; | ||
547 | if (c2 > 0) | ||
548 | { | ||
549 | lc=c2; | ||
550 | do { | ||
551 | ll=(r[i]+lc)&BN_MASK2; | ||
552 | r[i++]=ll; | ||
553 | lc=(lc > ll); | ||
554 | } while (lc); | ||
555 | } | ||
556 | else | ||
557 | { | ||
558 | lc= -c2; | ||
559 | do { | ||
560 | ll=r[i]; | ||
561 | r[i++]=(ll-lc)&BN_MASK2; | ||
562 | lc=(lc > ll); | ||
563 | } while (lc); | ||
564 | } | ||
565 | } | ||
566 | } | ||
567 | #endif | ||
diff --git a/src/lib/libcrypto/bn/old/bn_low.c b/src/lib/libcrypto/bn/old/bn_low.c new file mode 100644 index 0000000000..cbc406751c --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_low.c | |||
@@ -0,0 +1,194 @@ | |||
1 | /* crypto/bn/bn_mul.c */ | ||
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * This package is an SSL implementation written | ||
6 | * by Eric Young (eay@cryptsoft.com). | ||
7 | * The implementation was written so as to conform with Netscapes SSL. | ||
8 | * | ||
9 | * This library is free for commercial and non-commercial use as long as | ||
10 | * the following conditions are aheared to. The following conditions | ||
11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
13 | * included with this distribution is covered by the same copyright terms | ||
14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
15 | * | ||
16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
17 | * the code are not to be removed. | ||
18 | * If this package is used in a product, Eric Young should be given attribution | ||
19 | * as the author of the parts of the library used. | ||
20 | * This can be in the form of a textual message at program startup or | ||
21 | * in documentation (online or textual) provided with the package. | ||
22 | * | ||
23 | * Redistribution and use in source and binary forms, with or without | ||
24 | * modification, are permitted provided that the following conditions | ||
25 | * are met: | ||
26 | * 1. Redistributions of source code must retain the copyright | ||
27 | * notice, this list of conditions and the following disclaimer. | ||
28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
29 | * notice, this list of conditions and the following disclaimer in the | ||
30 | * documentation and/or other materials provided with the distribution. | ||
31 | * 3. All advertising materials mentioning features or use of this software | ||
32 | * must display the following acknowledgement: | ||
33 | * "This product includes cryptographic software written by | ||
34 | * Eric Young (eay@cryptsoft.com)" | ||
35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
36 | * being used are not cryptographic related :-). | ||
37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
38 | * the apps directory (application code) you must include an acknowledgement: | ||
39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
40 | * | ||
41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
51 | * SUCH DAMAGE. | ||
52 | * | ||
53 | * The licence and distribution terms for any publically available version or | ||
54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
55 | * copied and put under another distribution licence | ||
56 | * [including the GNU Public Licence.] | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include "bn_lcl.h" | ||
62 | |||
63 | static int bn_mm_low(BIGNUM *m,BIGNUM *A,BIGNUM *B, int num, | ||
64 | BIGNUM *sk,BN_CTX *ctx); | ||
65 | int BN_mul_low(BIGNUM *r, BIGNUM *a, BIGNUM *b,int words); | ||
66 | |||
67 | /* r must be different to a and b */ | ||
68 | int BN_mul_low(BIGNUM *r, BIGNUM *a, BIGNUM *b, int num) | ||
69 | { | ||
70 | BN_ULONG *ap,*bp,*rp; | ||
71 | BIGNUM *sk; | ||
72 | int j,i,n,ret; | ||
73 | int max,al,bl; | ||
74 | BN_CTX ctx; | ||
75 | |||
76 | bn_check_top(a); | ||
77 | bn_check_top(b); | ||
78 | |||
79 | #ifdef BN_MUL_DEBUG | ||
80 | printf("BN_mul_low(%d,%d,%d)\n",a->top,b->top,num); | ||
81 | #endif | ||
82 | |||
83 | al=a->top; | ||
84 | bl=b->top; | ||
85 | if ((al == 0) || (bl == 0)) | ||
86 | { | ||
87 | r->top=0; | ||
88 | return(1); | ||
89 | } | ||
90 | |||
91 | if ((bn_limit_bits_low > 0) && (num > bn_limit_num_low)) | ||
92 | { | ||
93 | n=BN_num_bits_word(num*2)-bn_limit_bits_low; | ||
94 | n*=2; | ||
95 | sk=(BIGNUM *)Malloc(sizeof(BIGNUM)*n); | ||
96 | memset(sk,0,sizeof(BIGNUM)*n); | ||
97 | memset(&ctx,0,sizeof(ctx)); | ||
98 | |||
99 | ret=bn_mm_low(r,a,b,num,&(sk[0]),&ctx); | ||
100 | for (i=0; i<n; i+=2) | ||
101 | { | ||
102 | BN_clear_free(&sk[i]); | ||
103 | BN_clear_free(&sk[i+1]); | ||
104 | } | ||
105 | Free(sk); | ||
106 | return(ret); | ||
107 | } | ||
108 | |||
109 | max=(al+bl); | ||
110 | if (bn_wexpand(r,max) == NULL) return(0); | ||
111 | r->neg=a->neg^b->neg; | ||
112 | ap=a->d; | ||
113 | bp=b->d; | ||
114 | rp=r->d; | ||
115 | r->top=(max > num)?num:max; | ||
116 | |||
117 | rp[al]=bn_mul_words(rp,ap,al,*(bp++)); | ||
118 | rp++; | ||
119 | j=bl; | ||
120 | for (i=1; i<j; i++) | ||
121 | { | ||
122 | if (al >= num--) | ||
123 | { | ||
124 | al--; | ||
125 | if (al <= 0) break; | ||
126 | } | ||
127 | rp[al]=bn_mul_add_words(rp,ap,al,*(bp++)); | ||
128 | rp++; | ||
129 | } | ||
130 | |||
131 | while ((r->top > 0) && (r->d[r->top-1] == 0)) | ||
132 | r->top--; | ||
133 | return(1); | ||
134 | } | ||
135 | |||
136 | |||
137 | #define t1 (sk[0]) | ||
138 | #define t2 (sk[1]) | ||
139 | |||
140 | /* r must be different to a and b */ | ||
141 | int bn_mm_low(BIGNUM *m, BIGNUM *A, BIGNUM *B, int num, BIGNUM *sk, | ||
142 | BN_CTX *ctx) | ||
143 | { | ||
144 | int n; /* ,sqr=0; */ | ||
145 | int an,bn; | ||
146 | BIGNUM ah,al,bh,bl; | ||
147 | |||
148 | bn_wexpand(m,num+3); | ||
149 | an=A->top; | ||
150 | bn=B->top; | ||
151 | |||
152 | #ifdef BN_MUL_DEBUG | ||
153 | printf("bn_mm_low(%d,%d,%d)\n",A->top,B->top,num); | ||
154 | #endif | ||
155 | |||
156 | n=(num+1)/2; | ||
157 | |||
158 | BN_init(&ah); BN_init(&al); BN_init(&bh); BN_init(&bl); | ||
159 | |||
160 | bn_set_low( &al,A,n); | ||
161 | bn_set_high(&ah,A,n); | ||
162 | bn_set_low( &bl,B,n); | ||
163 | bn_set_high(&bh,B,n); | ||
164 | |||
165 | if (num <= (bn_limit_num_low+bn_limit_num_low)) | ||
166 | { | ||
167 | BN_mul(m,&al,&bl); | ||
168 | BN_mul_low(&t1,&al,&bh,n); | ||
169 | BN_mul_low(&t2,&ah,&bl,n); | ||
170 | } | ||
171 | else | ||
172 | { | ||
173 | bn_mm(m ,&al,&bl,&(sk[2]),ctx); | ||
174 | bn_mm_low(&t1,&al,&bh,n,&(sk[2]),ctx); | ||
175 | bn_mm_low(&t2,&ah,&bl,n,&(sk[2]),ctx); | ||
176 | } | ||
177 | |||
178 | BN_add(&t1,&t1,&t2); | ||
179 | |||
180 | /* We will now do an evil hack instead of | ||
181 | * BN_lshift(&t1,&t1,n*BN_BITS2); | ||
182 | * BN_add(m,m,&t1); | ||
183 | * BN_mask_bits(m,num*BN_BITS2); | ||
184 | */ | ||
185 | bn_set_high(&ah,m,n); ah.max=num+2; | ||
186 | BN_add(&ah,&ah,&t1); | ||
187 | m->top=num; | ||
188 | |||
189 | m->neg=A->neg^B->neg; | ||
190 | return(1); | ||
191 | } | ||
192 | |||
193 | #undef t1 (sk[0]) | ||
194 | #undef t2 (sk[1]) | ||
diff --git a/src/lib/libcrypto/bn/old/bn_m.c b/src/lib/libcrypto/bn/old/bn_m.c new file mode 100644 index 0000000000..522beb02bc --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_m.c | |||
@@ -0,0 +1,139 @@ | |||
1 | /* crypto/bn/bn_m.c */ | ||
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * This package is an SSL implementation written | ||
6 | * by Eric Young (eay@cryptsoft.com). | ||
7 | * The implementation was written so as to conform with Netscapes SSL. | ||
8 | * | ||
9 | * This library is free for commercial and non-commercial use as long as | ||
10 | * the following conditions are aheared to. The following conditions | ||
11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
13 | * included with this distribution is covered by the same copyright terms | ||
14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
15 | * | ||
16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
17 | * the code are not to be removed. | ||
18 | * If this package is used in a product, Eric Young should be given attribution | ||
19 | * as the author of the parts of the library used. | ||
20 | * This can be in the form of a textual message at program startup or | ||
21 | * in documentation (online or textual) provided with the package. | ||
22 | * | ||
23 | * Redistribution and use in source and binary forms, with or without | ||
24 | * modification, are permitted provided that the following conditions | ||
25 | * are met: | ||
26 | * 1. Redistributions of source code must retain the copyright | ||
27 | * notice, this list of conditions and the following disclaimer. | ||
28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
29 | * notice, this list of conditions and the following disclaimer in the | ||
30 | * documentation and/or other materials provided with the distribution. | ||
31 | * 3. All advertising materials mentioning features or use of this software | ||
32 | * must display the following acknowledgement: | ||
33 | * "This product includes cryptographic software written by | ||
34 | * Eric Young (eay@cryptsoft.com)" | ||
35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
36 | * being used are not cryptographic related :-). | ||
37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
38 | * the apps directory (application code) you must include an acknowledgement: | ||
39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
40 | * | ||
41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
51 | * SUCH DAMAGE. | ||
52 | * | ||
53 | * The licence and distribution terms for any publically available version or | ||
54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
55 | * copied and put under another distribution licence | ||
56 | * [including the GNU Public Licence.] | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | /*#include "cryptlib.h"*/ | ||
61 | #include "bn_lcl.h" | ||
62 | |||
63 | #define limit_bits 5 /* 2^5, or 32 words */ | ||
64 | #define limit_num (1<<limit_bits) | ||
65 | |||
66 | int BN_m(BIGNUM *r, BIGNUM *a, BIGNUM *b) | ||
67 | { | ||
68 | BIGNUM *sk; | ||
69 | int i,n; | ||
70 | |||
71 | n=(BN_num_bits_word(a->top|b->top)-limit_bits); | ||
72 | n*=2; | ||
73 | sk=(BIGNUM *)malloc(sizeof(BIGNUM)*n); | ||
74 | for (i=0; i<n; i++) | ||
75 | BN_init(&(sk[i])); | ||
76 | |||
77 | return(BN_mm(r,a,b,&(sk[0]))); | ||
78 | } | ||
79 | |||
80 | #define ahal (sk[0]) | ||
81 | #define blbh (sk[1]) | ||
82 | |||
83 | /* r must be different to a and b */ | ||
84 | int BN_mm(BIGNUM *m, BIGNUM *A, BIGNUM *B, BIGNUM *sk) | ||
85 | { | ||
86 | int i,num,anum,bnum; | ||
87 | int an,bn; | ||
88 | BIGNUM ah,al,bh,bl; | ||
89 | |||
90 | an=A->top; | ||
91 | bn=B->top; | ||
92 | if ((an <= limit_num) || (bn <= limit_num)) | ||
93 | { | ||
94 | return(BN_mul(m,A,B)); | ||
95 | } | ||
96 | |||
97 | anum=(an>bn)?an:bn; | ||
98 | num=(anum)/2; | ||
99 | |||
100 | /* Are going to now chop things into 'num' word chunks. */ | ||
101 | bnum=num*BN_BITS2; | ||
102 | |||
103 | BN_init(&ahal); | ||
104 | BN_init(&blbh); | ||
105 | BN_init(&ah); | ||
106 | BN_init(&al); | ||
107 | BN_init(&bh); | ||
108 | BN_init(&bl); | ||
109 | |||
110 | al.top=num; | ||
111 | al.d=A->d; | ||
112 | ah.top=A->top-num; | ||
113 | ah.d= &(A->d[num]); | ||
114 | |||
115 | bl.top=num; | ||
116 | bl.d=B->d; | ||
117 | bh.top=B->top-num; | ||
118 | bh.d= &(B->d[num]); | ||
119 | |||
120 | BN_sub(&ahal,&ah,&al); | ||
121 | BN_sub(&blbh,&bl,&bh); | ||
122 | |||
123 | BN_mm(m,&ahal,&blbh,&(sk[2])); | ||
124 | BN_mm(&ahal,&al,&bl,&(sk[2])); | ||
125 | BN_mm(&blbh,&ah,&bh,&(sk[2])); | ||
126 | |||
127 | BN_add(m,m,&ahal); | ||
128 | BN_add(m,m,&blbh); | ||
129 | |||
130 | BN_lshift(m,m,bnum); | ||
131 | BN_add(m,m,&ahal); | ||
132 | |||
133 | BN_lshift(&blbh,&blbh,bnum*2); | ||
134 | BN_add(m,m,&blbh); | ||
135 | |||
136 | m->neg=A->neg^B->neg; | ||
137 | return(1); | ||
138 | } | ||
139 | |||
diff --git a/src/lib/libcrypto/bn/old/bn_mul.c.works b/src/lib/libcrypto/bn/old/bn_mul.c.works new file mode 100644 index 0000000000..6d565d44a2 --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_mul.c.works | |||
@@ -0,0 +1,219 @@ | |||
1 | /* crypto/bn/bn_mul.c */ | ||
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * This package is an SSL implementation written | ||
6 | * by Eric Young (eay@cryptsoft.com). | ||
7 | * The implementation was written so as to conform with Netscapes SSL. | ||
8 | * | ||
9 | * This library is free for commercial and non-commercial use as long as | ||
10 | * the following conditions are aheared to. The following conditions | ||
11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
13 | * included with this distribution is covered by the same copyright terms | ||
14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
15 | * | ||
16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
17 | * the code are not to be removed. | ||
18 | * If this package is used in a product, Eric Young should be given attribution | ||
19 | * as the author of the parts of the library used. | ||
20 | * This can be in the form of a textual message at program startup or | ||
21 | * in documentation (online or textual) provided with the package. | ||
22 | * | ||
23 | * Redistribution and use in source and binary forms, with or without | ||
24 | * modification, are permitted provided that the following conditions | ||
25 | * are met: | ||
26 | * 1. Redistributions of source code must retain the copyright | ||
27 | * notice, this list of conditions and the following disclaimer. | ||
28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
29 | * notice, this list of conditions and the following disclaimer in the | ||
30 | * documentation and/or other materials provided with the distribution. | ||
31 | * 3. All advertising materials mentioning features or use of this software | ||
32 | * must display the following acknowledgement: | ||
33 | * "This product includes cryptographic software written by | ||
34 | * Eric Young (eay@cryptsoft.com)" | ||
35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
36 | * being used are not cryptographic related :-). | ||
37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
38 | * the apps directory (application code) you must include an acknowledgement: | ||
39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
40 | * | ||
41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
51 | * SUCH DAMAGE. | ||
52 | * | ||
53 | * The licence and distribution terms for any publically available version or | ||
54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
55 | * copied and put under another distribution licence | ||
56 | * [including the GNU Public Licence.] | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include "bn_lcl.h" | ||
62 | |||
63 | int bn_mm(BIGNUM *m,BIGNUM *A,BIGNUM *B, BIGNUM *sk,BN_CTX *ctx); | ||
64 | |||
65 | /* r must be different to a and b */ | ||
66 | int BN_mul(r, a, b) | ||
67 | BIGNUM *r; | ||
68 | BIGNUM *a; | ||
69 | BIGNUM *b; | ||
70 | { | ||
71 | BN_ULONG *ap,*bp,*rp; | ||
72 | BIGNUM *sk; | ||
73 | int i,n,ret; | ||
74 | int max,al,bl; | ||
75 | BN_CTX ctx; | ||
76 | |||
77 | bn_check_top(a); | ||
78 | bn_check_top(b); | ||
79 | |||
80 | al=a->top; | ||
81 | bl=b->top; | ||
82 | if ((al == 0) || (bl == 0)) | ||
83 | { | ||
84 | r->top=0; | ||
85 | return(1); | ||
86 | } | ||
87 | #ifdef BN_MUL_DEBUG | ||
88 | printf("BN_mul(%d,%d)\n",a->top,b->top); | ||
89 | #endif | ||
90 | |||
91 | #ifdef BN_RECURSION | ||
92 | if ( (bn_limit_bits > 0) && | ||
93 | (bl > bn_limit_num) && (al > bn_limit_num)) | ||
94 | { | ||
95 | n=(BN_num_bits_word(al|bl)-bn_limit_bits); | ||
96 | n*=2; | ||
97 | sk=(BIGNUM *)Malloc(sizeof(BIGNUM)*n); | ||
98 | memset(sk,0,sizeof(BIGNUM)*n); | ||
99 | memset(&ctx,0,sizeof(ctx)); | ||
100 | |||
101 | ret=bn_mm(r,a,b,&(sk[0]),&ctx); | ||
102 | for (i=0; i<n; i+=2) | ||
103 | { | ||
104 | BN_clear_free(&sk[i]); | ||
105 | BN_clear_free(&sk[i+1]); | ||
106 | } | ||
107 | Free(sk); | ||
108 | return(ret); | ||
109 | } | ||
110 | #endif | ||
111 | |||
112 | max=(al+bl); | ||
113 | if (bn_wexpand(r,max) == NULL) return(0); | ||
114 | r->top=max; | ||
115 | r->neg=a->neg^b->neg; | ||
116 | ap=a->d; | ||
117 | bp=b->d; | ||
118 | rp=r->d; | ||
119 | |||
120 | #ifdef BN_RECURSION | ||
121 | if ((al == bl) && (al == 8)) | ||
122 | { | ||
123 | bn_mul_comba8(rp,ap,bp); | ||
124 | } | ||
125 | else | ||
126 | #endif | ||
127 | { | ||
128 | rp[al]=bn_mul_words(rp,ap,al,*(bp++)); | ||
129 | rp++; | ||
130 | for (i=1; i<bl; i++) | ||
131 | { | ||
132 | rp[al]=bn_mul_add_words(rp,ap,al,*(bp++)); | ||
133 | rp++; | ||
134 | } | ||
135 | } | ||
136 | if ((max > 0) && (r->d[max-1] == 0)) r->top--; | ||
137 | return(1); | ||
138 | } | ||
139 | |||
140 | #ifdef BN_RECURSION | ||
141 | |||
142 | #define ahal (sk[0]) | ||
143 | #define blbh (sk[1]) | ||
144 | |||
145 | /* r must be different to a and b */ | ||
146 | int bn_mm(m, A, B, sk,ctx) | ||
147 | BIGNUM *m,*A,*B; | ||
148 | BIGNUM *sk; | ||
149 | BN_CTX *ctx; | ||
150 | { | ||
151 | int n,num,sqr=0; | ||
152 | int an,bn; | ||
153 | BIGNUM ah,al,bh,bl; | ||
154 | |||
155 | an=A->top; | ||
156 | bn=B->top; | ||
157 | #ifdef BN_MUL_DEBUG | ||
158 | printf("bn_mm(%d,%d)\n",A->top,B->top); | ||
159 | #endif | ||
160 | |||
161 | if (A == B) sqr=1; | ||
162 | num=(an>bn)?an:bn; | ||
163 | n=(num+1)/2; | ||
164 | /* Are going to now chop things into 'num' word chunks. */ | ||
165 | |||
166 | BN_init(&ah); | ||
167 | BN_init(&al); | ||
168 | BN_init(&bh); | ||
169 | BN_init(&bl); | ||
170 | |||
171 | bn_set_low (&al,A,n); | ||
172 | bn_set_high(&ah,A,n); | ||
173 | bn_set_low (&bl,B,n); | ||
174 | bn_set_high(&bh,B,n); | ||
175 | |||
176 | BN_sub(&ahal,&ah,&al); | ||
177 | BN_sub(&blbh,&bl,&bh); | ||
178 | |||
179 | if (num <= (bn_limit_num+bn_limit_num)) | ||
180 | { | ||
181 | BN_mul(m,&ahal,&blbh); | ||
182 | if (sqr) | ||
183 | { | ||
184 | BN_sqr(&ahal,&al,ctx); | ||
185 | BN_sqr(&blbh,&ah,ctx); | ||
186 | } | ||
187 | else | ||
188 | { | ||
189 | BN_mul(&ahal,&al,&bl); | ||
190 | BN_mul(&blbh,&ah,&bh); | ||
191 | } | ||
192 | } | ||
193 | else | ||
194 | { | ||
195 | bn_mm(m,&ahal,&blbh,&(sk[2]),ctx); | ||
196 | bn_mm(&ahal,&al,&bl,&(sk[2]),ctx); | ||
197 | bn_mm(&blbh,&ah,&bh,&(sk[2]),ctx); | ||
198 | } | ||
199 | |||
200 | BN_add(m,m,&ahal); | ||
201 | BN_add(m,m,&blbh); | ||
202 | |||
203 | BN_lshift(m,m,n*BN_BITS2); | ||
204 | BN_lshift(&blbh,&blbh,n*BN_BITS2*2); | ||
205 | |||
206 | BN_add(m,m,&ahal); | ||
207 | BN_add(m,m,&blbh); | ||
208 | |||
209 | m->neg=A->neg^B->neg; | ||
210 | return(1); | ||
211 | } | ||
212 | #undef ahal (sk[0]) | ||
213 | #undef blbh (sk[1]) | ||
214 | |||
215 | #include "bn_low.c" | ||
216 | #include "bn_high.c" | ||
217 | #include "f.c" | ||
218 | |||
219 | #endif | ||
diff --git a/src/lib/libcrypto/bn/old/bn_wmul.c b/src/lib/libcrypto/bn/old/bn_wmul.c new file mode 100644 index 0000000000..a467b2f17a --- /dev/null +++ b/src/lib/libcrypto/bn/old/bn_wmul.c | |||
@@ -0,0 +1,173 @@ | |||
1 | #include <stdio.h> | ||
2 | #include "bn_lcl.h" | ||
3 | |||
4 | #if 1 | ||
5 | |||
6 | int bn_mull(BIGNUM *r,BIGNUM *a,BIGNUM *b, BN_CTX *ctx); | ||
7 | |||
8 | int bn_mull(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx) | ||
9 | { | ||
10 | int top,i,j,k,al,bl; | ||
11 | BIGNUM *t; | ||
12 | |||
13 | #ifdef BN_COUNT | ||
14 | printf("bn_mull %d * %d\n",a->top,b->top); | ||
15 | #endif | ||
16 | |||
17 | bn_check_top(a); | ||
18 | bn_check_top(b); | ||
19 | bn_check_top(r); | ||
20 | |||
21 | al=a->top; | ||
22 | bl=b->top; | ||
23 | r->neg=a->neg^b->neg; | ||
24 | |||
25 | top=al+bl; | ||
26 | if ((al < 4) || (bl < 4)) | ||
27 | { | ||
28 | if (bn_wexpand(r,top) == NULL) return(0); | ||
29 | r->top=top; | ||
30 | bn_mul_normal(r->d,a->d,al,b->d,bl); | ||
31 | goto end; | ||
32 | } | ||
33 | else if (al == bl) /* A good start, they are the same size */ | ||
34 | goto symetric; | ||
35 | else | ||
36 | { | ||
37 | i=(al-bl); | ||
38 | if ((i == 1) && !BN_get_flags(b,BN_FLG_STATIC_DATA)) | ||
39 | { | ||
40 | bn_wexpand(b,al); | ||
41 | b->d[bl]=0; | ||
42 | bl++; | ||
43 | goto symetric; | ||
44 | } | ||
45 | else if ((i == -1) && !BN_get_flags(a,BN_FLG_STATIC_DATA)) | ||
46 | { | ||
47 | bn_wexpand(a,bl); | ||
48 | a->d[al]=0; | ||
49 | al++; | ||
50 | goto symetric; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | /* asymetric and >= 4 */ | ||
55 | if (bn_wexpand(r,top) == NULL) return(0); | ||
56 | r->top=top; | ||
57 | bn_mul_normal(r->d,a->d,al,b->d,bl); | ||
58 | |||
59 | if (0) | ||
60 | { | ||
61 | /* symetric and > 4 */ | ||
62 | symetric: | ||
63 | if (al == 4) | ||
64 | { | ||
65 | if (bn_wexpand(r,al*2) == NULL) return(0); | ||
66 | r->top=top; | ||
67 | bn_mul_comba4(r->d,a->d,b->d); | ||
68 | goto end; | ||
69 | } | ||
70 | if (al == 8) | ||
71 | { | ||
72 | if (bn_wexpand(r,al*2) == NULL) return(0); | ||
73 | r->top=top; | ||
74 | bn_mul_comba8(r->d,a->d,b->d); | ||
75 | goto end; | ||
76 | } | ||
77 | if (al <= BN_MULL_NORMAL_SIZE) | ||
78 | { | ||
79 | if (bn_wexpand(r,al*2) == NULL) return(0); | ||
80 | r->top=top; | ||
81 | bn_mul_normal(r->d,a->d,al,b->d,bl); | ||
82 | goto end; | ||
83 | } | ||
84 | /* 16 or larger */ | ||
85 | j=BN_num_bits_word((BN_ULONG)al); | ||
86 | j=1<<(j-1); | ||
87 | k=j+j; | ||
88 | t= &(ctx->bn[ctx->tos]); | ||
89 | if (al == j) /* exact multiple */ | ||
90 | { | ||
91 | bn_wexpand(t,k*2); | ||
92 | bn_wexpand(r,k*2); | ||
93 | bn_mul_recursive(r->d,a->d,b->d,al,t->d); | ||
94 | } | ||
95 | else | ||
96 | { | ||
97 | bn_wexpand(a,k); | ||
98 | bn_wexpand(b,k); | ||
99 | bn_wexpand(t,k*4); | ||
100 | bn_wexpand(r,k*4); | ||
101 | for (i=a->top; i<k; i++) | ||
102 | a->d[i]=0; | ||
103 | for (i=b->top; i<k; i++) | ||
104 | b->d[i]=0; | ||
105 | bn_mul_part_recursive(r->d,a->d,b->d,al-j,j,t->d); | ||
106 | } | ||
107 | r->top=top; | ||
108 | } | ||
109 | end: | ||
110 | bn_fix_top(r); | ||
111 | return(1); | ||
112 | } | ||
113 | #endif | ||
114 | |||
115 | void bn_mul_normal(BN_ULONG *r, BN_ULONG *a, int na, BN_ULONG *b, int nb) | ||
116 | { | ||
117 | BN_ULONG *rr; | ||
118 | |||
119 | #ifdef BN_COUNT | ||
120 | printf(" bn_mul_normal %d * %d\n",na,nb); | ||
121 | #endif | ||
122 | |||
123 | if (na < nb) | ||
124 | { | ||
125 | int itmp; | ||
126 | BN_ULONG *ltmp; | ||
127 | |||
128 | itmp=na; na=nb; nb=itmp; | ||
129 | ltmp=a; a=b; b=ltmp; | ||
130 | |||
131 | } | ||
132 | rr= &(r[na]); | ||
133 | rr[0]=bn_mul_words(r,a,na,b[0]); | ||
134 | |||
135 | for (;;) | ||
136 | { | ||
137 | if (--nb <= 0) return; | ||
138 | rr[1]=bn_mul_add_words(&(r[1]),a,na,b[1]); | ||
139 | if (--nb <= 0) return; | ||
140 | rr[2]=bn_mul_add_words(&(r[2]),a,na,b[2]); | ||
141 | if (--nb <= 0) return; | ||
142 | rr[3]=bn_mul_add_words(&(r[3]),a,na,b[3]); | ||
143 | if (--nb <= 0) return; | ||
144 | rr[4]=bn_mul_add_words(&(r[4]),a,na,b[4]); | ||
145 | rr+=4; | ||
146 | r+=4; | ||
147 | b+=4; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | #if 1 | ||
152 | void bn_mul_low_normal(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) | ||
153 | { | ||
154 | #ifdef BN_COUNT | ||
155 | printf(" bn_mul_low_normal %d * %d\n",n,n); | ||
156 | #endif | ||
157 | bn_mul_words(r,a,n,b[0]); | ||
158 | |||
159 | for (;;) | ||
160 | { | ||
161 | if (--n <= 0) return; | ||
162 | bn_mul_add_words(&(r[1]),a,n,b[1]); | ||
163 | if (--n <= 0) return; | ||
164 | bn_mul_add_words(&(r[2]),a,n,b[2]); | ||
165 | if (--n <= 0) return; | ||
166 | bn_mul_add_words(&(r[3]),a,n,b[3]); | ||
167 | if (--n <= 0) return; | ||
168 | bn_mul_add_words(&(r[4]),a,n,b[4]); | ||
169 | r+=4; | ||
170 | b+=4; | ||
171 | } | ||
172 | } | ||
173 | #endif | ||
diff --git a/src/lib/libcrypto/bn/old/build b/src/lib/libcrypto/bn/old/build new file mode 100644 index 0000000000..8cd99e5f17 --- /dev/null +++ b/src/lib/libcrypto/bn/old/build | |||
@@ -0,0 +1,3 @@ | |||
1 | #!/bin/sh -x | ||
2 | |||
3 | gcc -g -I../../include test.c -L../.. -lcrypto | ||
diff --git a/src/lib/libcrypto/bn/old/info b/src/lib/libcrypto/bn/old/info new file mode 100644 index 0000000000..5ac99c3b23 --- /dev/null +++ b/src/lib/libcrypto/bn/old/info | |||
@@ -0,0 +1,22 @@ | |||
1 | Given A1A0 * B1B0 == S3S2S1S0 | ||
2 | |||
3 | S0= low(A0*B0) | ||
4 | S1= low( (A1-A0)*(B0-B1)) +low( A1*B1) +high(A0*B0) | ||
5 | S2= high((A1-A0)*(B0-B1)) +high(A1*B1) +low( A1*B1) | ||
6 | S3= high(A1*B1); | ||
7 | |||
8 | Assume we know S1 and S0, and can calulate A1*B1 and high((A1-A0)*(B0-B1)) | ||
9 | |||
10 | k0= S0 == low(A0*B0) | ||
11 | k1= S1 | ||
12 | k2= low( A1*B1) | ||
13 | k3= high(A1*B1) | ||
14 | k4= high((A1-A0)*(B0-B1)) | ||
15 | |||
16 | k1= low((A1-A0)*(B0-B1)) +k2 +high(A0*B0) | ||
17 | S2= k4 +k3 +k2 | ||
18 | S3= k3 | ||
19 | |||
20 | S1-k2= low((A1-A0)*(B0-B1)) +high(A0*B0) | ||
21 | |||
22 | We potentially have a carry or a borrow from S1 | ||
diff --git a/src/lib/libcrypto/bn/old/test.works b/src/lib/libcrypto/bn/old/test.works new file mode 100644 index 0000000000..127c7b415d --- /dev/null +++ b/src/lib/libcrypto/bn/old/test.works | |||
@@ -0,0 +1,205 @@ | |||
1 | #include <stdio.h> | ||
2 | #include "cryptlib.h" | ||
3 | #include "bn_lcl.h" | ||
4 | |||
5 | #define SIZE 128 | ||
6 | |||
7 | #define BN_MONT_CTX_set bn_mcs | ||
8 | #define BN_from_montgomery bn_fm | ||
9 | #define BN_mod_mul_montgomery bn_mmm | ||
10 | #undef BN_to_montgomery | ||
11 | #define BN_to_montgomery(r,a,mont,ctx) bn_mmm(\ | ||
12 | r,a,(mont)->RR,(mont),ctx) | ||
13 | |||
14 | main() | ||
15 | { | ||
16 | BIGNUM prime,a,b,r,A,B,R; | ||
17 | BN_MONT_CTX *mont; | ||
18 | BN_CTX *ctx; | ||
19 | int i; | ||
20 | |||
21 | ctx=BN_CTX_new(); | ||
22 | BN_init(&prime); | ||
23 | BN_init(&a); BN_init(&b); BN_init(&r); | ||
24 | BN_init(&A); BN_init(&B); BN_init(&R); | ||
25 | |||
26 | BN_generate_prime(&prime,SIZE,0,NULL,NULL,NULL,NULL); | ||
27 | BN_rand(&A,SIZE,1,0); | ||
28 | BN_rand(&B,SIZE,1,0); | ||
29 | BN_mod(&A,&A,&prime,ctx); | ||
30 | BN_mod(&B,&B,&prime,ctx); | ||
31 | |||
32 | mont=BN_MONT_CTX_new(); | ||
33 | BN_MONT_CTX_set(mont,&prime,ctx); | ||
34 | |||
35 | BN_to_montgomery(&a,&A,mont,ctx); | ||
36 | BN_to_montgomery(&b,&B,mont,ctx); | ||
37 | |||
38 | BN_mul(&r,&a,&b); | ||
39 | BN_print_fp(stdout,&r); printf("\n"); | ||
40 | BN_from_montgomery(&r,&r,mont,ctx); | ||
41 | BN_print_fp(stdout,&r); printf("\n"); | ||
42 | BN_from_montgomery(&r,&r,mont,ctx); | ||
43 | BN_print_fp(stdout,&r); printf("\n"); | ||
44 | |||
45 | BN_mod_mul(&R,&A,&B,&prime,ctx); | ||
46 | |||
47 | BN_print_fp(stdout,&a); printf("\n"); | ||
48 | BN_print_fp(stdout,&b); printf("\n"); | ||
49 | BN_print_fp(stdout,&prime); printf("\n"); | ||
50 | BN_print_fp(stdout,&r); printf("\n\n"); | ||
51 | |||
52 | BN_print_fp(stdout,&A); printf("\n"); | ||
53 | BN_print_fp(stdout,&B); printf("\n"); | ||
54 | BN_print_fp(stdout,&prime); printf("\n"); | ||
55 | BN_print_fp(stdout,&R); printf("\n\n"); | ||
56 | |||
57 | BN_mul(&r,&a,&b); | ||
58 | BN_print_fp(stdout,&r); printf(" <- BA*DC\n"); | ||
59 | BN_copy(&A,&r); | ||
60 | i=SIZE/2; | ||
61 | BN_mask_bits(&A,i*2); | ||
62 | // BN_print_fp(stdout,&A); printf(" <- low(BA*DC)\n"); | ||
63 | bn_do_lower(&r,&a,&b,&A,i); | ||
64 | // BN_print_fp(stdout,&r); printf(" <- low(BA*DC)\n"); | ||
65 | } | ||
66 | |||
67 | int bn_mul_low(r,a,b,low,i) | ||
68 | BIGNUM *r,*a,*b,*low; | ||
69 | int i; | ||
70 | { | ||
71 | int w; | ||
72 | BIGNUM Kh,Km,t1,t2,h,ah,al,bh,bl,l,m,s0,s1; | ||
73 | |||
74 | BN_init(&Kh); BN_init(&Km); BN_init(&t1); BN_init(&t2); BN_init(&l); | ||
75 | BN_init(&ah); BN_init(&al); BN_init(&bh); BN_init(&bl); BN_init(&h); | ||
76 | BN_init(&m); BN_init(&s0); BN_init(&s1); | ||
77 | |||
78 | BN_copy(&al,a); BN_mask_bits(&al,i); BN_rshift(&ah,a,i); | ||
79 | BN_copy(&bl,b); BN_mask_bits(&bl,i); BN_rshift(&bh,b,i); | ||
80 | |||
81 | |||
82 | BN_sub(&t1,&al,&ah); | ||
83 | BN_sub(&t2,&bh,&bl); | ||
84 | BN_mul(&m,&t1,&t2); | ||
85 | BN_mul(&h,&ah,&bh); | ||
86 | |||
87 | BN_copy(&s0,low); BN_mask_bits(&s0,i); | ||
88 | BN_rshift(&s1,low,i); | ||
89 | |||
90 | BN_add(&t1,&h,&m); | ||
91 | BN_add(&t1,&t1,&s0); | ||
92 | |||
93 | BN_copy(&t2,&t1); BN_mask_bits(&t2,i); | ||
94 | BN_sub(&t1,&s1,&t2); | ||
95 | BN_lshift(&t1,&t1,i); | ||
96 | BN_add(&t1,&t1,&s0); | ||
97 | if (t1.neg) | ||
98 | { | ||
99 | BN_lshift(&t2,BN_value_one(),i*2); | ||
100 | BN_add(&t1,&t2,&t1); | ||
101 | BN_mask_bits(&t1,i*2); | ||
102 | } | ||
103 | |||
104 | BN_free(&Kh); BN_free(&Km); BN_free(&t1); BN_free(&t2); | ||
105 | BN_free(&ah); BN_free(&al); BN_free(&bh); BN_free(&bl); | ||
106 | } | ||
107 | |||
108 | int BN_mod_mul_montgomery(r,a,b,mont,ctx) | ||
109 | BIGNUM *r,*a,*b; | ||
110 | BN_MONT_CTX *mont; | ||
111 | BN_CTX *ctx; | ||
112 | { | ||
113 | BIGNUM *tmp; | ||
114 | |||
115 | tmp= &(ctx->bn[ctx->tos++]); | ||
116 | |||
117 | if (a == b) | ||
118 | { | ||
119 | if (!BN_sqr(tmp,a,ctx)) goto err; | ||
120 | } | ||
121 | else | ||
122 | { | ||
123 | if (!BN_mul(tmp,a,b)) goto err; | ||
124 | } | ||
125 | /* reduce from aRR to aR */ | ||
126 | if (!BN_from_montgomery(r,tmp,mont,ctx)) goto err; | ||
127 | ctx->tos--; | ||
128 | return(1); | ||
129 | err: | ||
130 | return(0); | ||
131 | } | ||
132 | |||
133 | int BN_from_montgomery(r,a,mont,ctx) | ||
134 | BIGNUM *r; | ||
135 | BIGNUM *a; | ||
136 | BN_MONT_CTX *mont; | ||
137 | BN_CTX *ctx; | ||
138 | { | ||
139 | BIGNUM z1; | ||
140 | BIGNUM *t1,*t2; | ||
141 | BN_ULONG *ap,*bp,*rp; | ||
142 | int j,i,bl,al; | ||
143 | |||
144 | BN_init(&z1); | ||
145 | t1= &(ctx->bn[ctx->tos]); | ||
146 | t2= &(ctx->bn[ctx->tos+1]); | ||
147 | |||
148 | if (!BN_copy(t1,a)) goto err; | ||
149 | /* can cheat */ | ||
150 | BN_mask_bits(t1,mont->ri); | ||
151 | if (!BN_mul(t2,t1,mont->Ni)) goto err; | ||
152 | BN_mask_bits(t2,mont->ri); | ||
153 | |||
154 | if (!BN_mul(t1,t2,mont->N)) goto err; | ||
155 | if (!BN_add(t2,t1,a)) goto err; | ||
156 | |||
157 | /* At this point, t2 has the bottom ri bits set to zero. | ||
158 | * This means that the bottom ri bits == the 1^ri minus the bottom | ||
159 | * ri bits of a. | ||
160 | * This means that only the bits above 'ri' in a need to be added, | ||
161 | * and XXXXXXXXXXXXXXXXXXXXXXXX | ||
162 | */ | ||
163 | BN_print_fp(stdout,t2); printf("\n"); | ||
164 | BN_rshift(r,t2,mont->ri); | ||
165 | |||
166 | if (BN_ucmp(r,mont->N) >= 0) | ||
167 | bn_qsub(r,r,mont->N); | ||
168 | |||
169 | return(1); | ||
170 | err: | ||
171 | return(0); | ||
172 | } | ||
173 | |||
174 | int BN_MONT_CTX_set(mont,mod,ctx) | ||
175 | BN_MONT_CTX *mont; | ||
176 | BIGNUM *mod; | ||
177 | BN_CTX *ctx; | ||
178 | { | ||
179 | BIGNUM *Ri=NULL,*R=NULL; | ||
180 | |||
181 | if (mont->RR == NULL) mont->RR=BN_new(); | ||
182 | if (mont->N == NULL) mont->N=BN_new(); | ||
183 | |||
184 | R=mont->RR; /* grab RR as a temp */ | ||
185 | BN_copy(mont->N,mod); /* Set N */ | ||
186 | |||
187 | mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2; | ||
188 | BN_lshift(R,BN_value_one(),mont->ri); /* R */ | ||
189 | if ((Ri=BN_mod_inverse(NULL,R,mod,ctx)) == NULL) goto err;/* Ri */ | ||
190 | BN_lshift(Ri,Ri,mont->ri); /* R*Ri */ | ||
191 | bn_qsub(Ri,Ri,BN_value_one()); /* R*Ri - 1 */ | ||
192 | BN_div(Ri,NULL,Ri,mod,ctx); | ||
193 | if (mont->Ni != NULL) BN_free(mont->Ni); | ||
194 | mont->Ni=Ri; /* Ni=(R*Ri-1)/N */ | ||
195 | |||
196 | /* setup RR for conversions */ | ||
197 | BN_lshift(mont->RR,BN_value_one(),mont->ri*2); | ||
198 | BN_mod(mont->RR,mont->RR,mont->N,ctx); | ||
199 | |||
200 | return(1); | ||
201 | err: | ||
202 | return(0); | ||
203 | } | ||
204 | |||
205 | |||
diff --git a/src/lib/libcrypto/comp/Makefile.ssl b/src/lib/libcrypto/comp/Makefile.ssl new file mode 100644 index 0000000000..d946bcbafa --- /dev/null +++ b/src/lib/libcrypto/comp/Makefile.ssl | |||
@@ -0,0 +1,99 @@ | |||
1 | # | ||
2 | # SSLeay/crypto/comp/Makefile | ||
3 | # | ||
4 | |||
5 | DIR= comp | ||
6 | TOP= ../.. | ||
7 | CC= cc | ||
8 | INCLUDES= -I.. -I../../include | ||
9 | CFLAG=-g | ||
10 | INSTALL_PREFIX= | ||
11 | OPENSSLDIR= /usr/local/ssl | ||
12 | INSTALLTOP=/usr/local/ssl | ||
13 | MAKE= make -f Makefile.ssl | ||
14 | MAKEDEPEND= $(TOP)/util/domd $(TOP) | ||
15 | MAKEFILE= Makefile.ssl | ||
16 | AR= ar r | ||
17 | |||
18 | CFLAGS= $(INCLUDES) $(CFLAG) | ||
19 | |||
20 | GENERAL=Makefile | ||
21 | TEST= | ||
22 | APPS= | ||
23 | |||
24 | LIB=$(TOP)/libcrypto.a | ||
25 | LIBSRC= comp_lib.c \ | ||
26 | c_rle.c c_zlib.c | ||
27 | |||
28 | LIBOBJ= comp_lib.o \ | ||
29 | c_rle.o c_zlib.o | ||
30 | |||
31 | SRC= $(LIBSRC) | ||
32 | |||
33 | EXHEADER= comp.h | ||
34 | HEADER= $(EXHEADER) | ||
35 | |||
36 | ALL= $(GENERAL) $(SRC) $(HEADER) | ||
37 | |||
38 | top: | ||
39 | (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) | ||
40 | |||
41 | all: lib | ||
42 | |||
43 | lib: $(LIBOBJ) | ||
44 | $(AR) $(LIB) $(LIBOBJ) | ||
45 | $(RANLIB) $(LIB) | ||
46 | @touch lib | ||
47 | |||
48 | files: | ||
49 | $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO | ||
50 | |||
51 | links: | ||
52 | @$(TOP)/util/point.sh Makefile.ssl Makefile | ||
53 | @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) | ||
54 | @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) | ||
55 | @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) | ||
56 | |||
57 | install: | ||
58 | @for i in $(EXHEADER) ; \ | ||
59 | do \ | ||
60 | (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ | ||
61 | chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ | ||
62 | done; | ||
63 | |||
64 | tags: | ||
65 | ctags $(SRC) | ||
66 | |||
67 | tests: | ||
68 | |||
69 | lint: | ||
70 | lint -DLINT $(INCLUDES) $(SRC)>fluff | ||
71 | |||
72 | depend: | ||
73 | $(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(LIBSRC) | ||
74 | |||
75 | dclean: | ||
76 | $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new | ||
77 | mv -f Makefile.new $(MAKEFILE) | ||
78 | |||
79 | clean: | ||
80 | rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff | ||
81 | |||
82 | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||
83 | |||
84 | c_rle.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
85 | c_rle.o: ../../include/openssl/bn.h ../../include/openssl/comp.h | ||
86 | c_rle.o: ../../include/openssl/crypto.h ../../include/openssl/objects.h | ||
87 | c_rle.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h | ||
88 | c_rle.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h | ||
89 | c_zlib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
90 | c_zlib.o: ../../include/openssl/bn.h ../../include/openssl/comp.h | ||
91 | c_zlib.o: ../../include/openssl/crypto.h ../../include/openssl/objects.h | ||
92 | c_zlib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h | ||
93 | c_zlib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h | ||
94 | comp_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
95 | comp_lib.o: ../../include/openssl/bn.h ../../include/openssl/comp.h | ||
96 | comp_lib.o: ../../include/openssl/crypto.h ../../include/openssl/objects.h | ||
97 | comp_lib.o: ../../include/openssl/opensslconf.h | ||
98 | comp_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h | ||
99 | comp_lib.o: ../../include/openssl/stack.h | ||
diff --git a/src/lib/libcrypto/comp/c_rle.c b/src/lib/libcrypto/comp/c_rle.c new file mode 100644 index 0000000000..1a819e3737 --- /dev/null +++ b/src/lib/libcrypto/comp/c_rle.c | |||
@@ -0,0 +1,61 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <string.h> | ||
4 | #include <openssl/objects.h> | ||
5 | #include <openssl/comp.h> | ||
6 | |||
7 | static int rle_compress_block(COMP_CTX *ctx, unsigned char *out, | ||
8 | unsigned int olen, unsigned char *in, unsigned int ilen); | ||
9 | static int rle_expand_block(COMP_CTX *ctx, unsigned char *out, | ||
10 | unsigned int olen, unsigned char *in, unsigned int ilen); | ||
11 | |||
12 | static COMP_METHOD rle_method={ | ||
13 | NID_rle_compression, | ||
14 | LN_rle_compression, | ||
15 | NULL, | ||
16 | NULL, | ||
17 | rle_compress_block, | ||
18 | rle_expand_block, | ||
19 | NULL, | ||
20 | }; | ||
21 | |||
22 | COMP_METHOD *COMP_rle(void) | ||
23 | { | ||
24 | return(&rle_method); | ||
25 | } | ||
26 | |||
27 | static int rle_compress_block(COMP_CTX *ctx, unsigned char *out, | ||
28 | unsigned int olen, unsigned char *in, unsigned int ilen) | ||
29 | { | ||
30 | /* int i; */ | ||
31 | |||
32 | if (olen < (ilen+1)) | ||
33 | { | ||
34 | /* ZZZZZZZZZZZZZZZZZZZZZZ */ | ||
35 | return(-1); | ||
36 | } | ||
37 | |||
38 | *(out++)=0; | ||
39 | memcpy(out,in,ilen); | ||
40 | return(ilen+1); | ||
41 | } | ||
42 | |||
43 | static int rle_expand_block(COMP_CTX *ctx, unsigned char *out, | ||
44 | unsigned int olen, unsigned char *in, unsigned int ilen) | ||
45 | { | ||
46 | int i; | ||
47 | |||
48 | if (olen < (ilen-1)) | ||
49 | { | ||
50 | /* ZZZZZZZZZZZZZZZZZZZZZZ */ | ||
51 | return(-1); | ||
52 | } | ||
53 | |||
54 | i= *(in++); | ||
55 | if (i == 0) | ||
56 | { | ||
57 | memcpy(out,in,ilen-1); | ||
58 | } | ||
59 | return(ilen-1); | ||
60 | } | ||
61 | |||
diff --git a/src/lib/libcrypto/comp/c_zlib.c b/src/lib/libcrypto/comp/c_zlib.c new file mode 100644 index 0000000000..6684ab4841 --- /dev/null +++ b/src/lib/libcrypto/comp/c_zlib.c | |||
@@ -0,0 +1,133 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <string.h> | ||
4 | #include <openssl/objects.h> | ||
5 | #include <openssl/comp.h> | ||
6 | |||
7 | COMP_METHOD *COMP_zlib(void ); | ||
8 | |||
9 | #ifndef ZLIB | ||
10 | |||
11 | static COMP_METHOD zlib_method={ | ||
12 | NID_undef, | ||
13 | "(null)", | ||
14 | NULL, | ||
15 | NULL, | ||
16 | NULL, | ||
17 | NULL, | ||
18 | NULL, | ||
19 | }; | ||
20 | |||
21 | #else | ||
22 | |||
23 | #include <zlib.h> | ||
24 | |||
25 | static int zlib_compress_block(COMP_CTX *ctx, unsigned char *out, | ||
26 | unsigned int olen, unsigned char *in, unsigned int ilen); | ||
27 | static int zlib_expand_block(COMP_CTX *ctx, unsigned char *out, | ||
28 | unsigned int olen, unsigned char *in, unsigned int ilen); | ||
29 | |||
30 | static int zz_uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, | ||
31 | uLong sourceLen); | ||
32 | |||
33 | static COMP_METHOD zlib_method={ | ||
34 | NID_zlib_compression, | ||
35 | LN_zlib_compression, | ||
36 | NULL, | ||
37 | NULL, | ||
38 | zlib_compress_block, | ||
39 | zlib_expand_block, | ||
40 | NULL, | ||
41 | }; | ||
42 | |||
43 | static int zlib_compress_block(COMP_CTX *ctx, unsigned char *out, | ||
44 | unsigned int olen, unsigned char *in, unsigned int ilen) | ||
45 | { | ||
46 | unsigned long l; | ||
47 | int i; | ||
48 | int clear=1; | ||
49 | |||
50 | if (ilen > 128) | ||
51 | { | ||
52 | out[0]=1; | ||
53 | l=olen-1; | ||
54 | i=compress(&(out[1]),&l,in,(unsigned long)ilen); | ||
55 | if (i != Z_OK) | ||
56 | return(-1); | ||
57 | if (ilen > l) | ||
58 | { | ||
59 | clear=0; | ||
60 | l++; | ||
61 | } | ||
62 | } | ||
63 | if (clear) | ||
64 | { | ||
65 | out[0]=0; | ||
66 | memcpy(&(out[1]),in,ilen); | ||
67 | l=ilen+1; | ||
68 | } | ||
69 | fprintf(stderr,"compress(%4d)->%4d %s\n",ilen,(int)l,(clear)?"clear":"zlib"); | ||
70 | return((int)l); | ||
71 | } | ||
72 | |||
73 | static int zlib_expand_block(COMP_CTX *ctx, unsigned char *out, | ||
74 | unsigned int olen, unsigned char *in, unsigned int ilen) | ||
75 | { | ||
76 | unsigned long l; | ||
77 | int i; | ||
78 | |||
79 | if (in[0]) | ||
80 | { | ||
81 | l=olen; | ||
82 | i=zz_uncompress(out,&l,&(in[1]),(unsigned long)ilen-1); | ||
83 | if (i != Z_OK) | ||
84 | return(-1); | ||
85 | } | ||
86 | else | ||
87 | { | ||
88 | memcpy(out,&(in[1]),ilen-1); | ||
89 | l=ilen-1; | ||
90 | } | ||
91 | fprintf(stderr,"expand (%4d)->%4d %s\n",ilen,(int)l,in[0]?"zlib":"clear"); | ||
92 | return((int)l); | ||
93 | } | ||
94 | |||
95 | static int zz_uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, | ||
96 | uLong sourceLen) | ||
97 | { | ||
98 | z_stream stream; | ||
99 | int err; | ||
100 | |||
101 | stream.next_in = (Bytef*)source; | ||
102 | stream.avail_in = (uInt)sourceLen; | ||
103 | /* Check for source > 64K on 16-bit machine: */ | ||
104 | if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; | ||
105 | |||
106 | stream.next_out = dest; | ||
107 | stream.avail_out = (uInt)*destLen; | ||
108 | if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; | ||
109 | |||
110 | stream.zalloc = (alloc_func)0; | ||
111 | stream.zfree = (free_func)0; | ||
112 | |||
113 | err = inflateInit(&stream); | ||
114 | if (err != Z_OK) return err; | ||
115 | |||
116 | err = inflate(&stream, Z_FINISH); | ||
117 | if (err != Z_STREAM_END) { | ||
118 | inflateEnd(&stream); | ||
119 | return err; | ||
120 | } | ||
121 | *destLen = stream.total_out; | ||
122 | |||
123 | err = inflateEnd(&stream); | ||
124 | return err; | ||
125 | } | ||
126 | |||
127 | #endif | ||
128 | |||
129 | COMP_METHOD *COMP_zlib(void) | ||
130 | { | ||
131 | return(&zlib_method); | ||
132 | } | ||
133 | |||
diff --git a/src/lib/libcrypto/comp/comp.h b/src/lib/libcrypto/comp/comp.h new file mode 100644 index 0000000000..93bd9c34c8 --- /dev/null +++ b/src/lib/libcrypto/comp/comp.h | |||
@@ -0,0 +1,60 @@ | |||
1 | |||
2 | #ifndef HEADER_COMP_H | ||
3 | #define HEADER_COMP_H | ||
4 | |||
5 | #ifdef __cplusplus | ||
6 | extern "C" { | ||
7 | #endif | ||
8 | |||
9 | #include <openssl/crypto.h> | ||
10 | |||
11 | typedef struct comp_method_st | ||
12 | { | ||
13 | int type; /* NID for compression library */ | ||
14 | const char *name; /* A text string to identify the library */ | ||
15 | int (*init)(); | ||
16 | void (*finish)(); | ||
17 | int (*compress)(); | ||
18 | int (*expand)(); | ||
19 | long (*ctrl)(); | ||
20 | } COMP_METHOD; | ||
21 | |||
22 | typedef struct comp_ctx_st | ||
23 | { | ||
24 | COMP_METHOD *meth; | ||
25 | unsigned long compress_in; | ||
26 | unsigned long compress_out; | ||
27 | unsigned long expand_in; | ||
28 | unsigned long expand_out; | ||
29 | |||
30 | CRYPTO_EX_DATA ex_data; | ||
31 | } COMP_CTX; | ||
32 | |||
33 | |||
34 | COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); | ||
35 | void COMP_CTX_free(COMP_CTX *ctx); | ||
36 | int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, | ||
37 | unsigned char *in, int ilen); | ||
38 | int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, | ||
39 | unsigned char *in, int ilen); | ||
40 | COMP_METHOD *COMP_rle(void ); | ||
41 | #ifdef ZLIB | ||
42 | COMP_METHOD *COMP_zlib(void ); | ||
43 | #endif | ||
44 | |||
45 | /* BEGIN ERROR CODES */ | ||
46 | /* The following lines are auto generated by the script mkerr.pl. Any changes | ||
47 | * made after this point may be overwritten when the script is next run. | ||
48 | */ | ||
49 | |||
50 | /* Error codes for the COMP functions. */ | ||
51 | |||
52 | /* Function codes. */ | ||
53 | |||
54 | /* Reason codes. */ | ||
55 | |||
56 | #ifdef __cplusplus | ||
57 | } | ||
58 | #endif | ||
59 | #endif | ||
60 | |||
diff --git a/src/lib/libcrypto/comp/comp_err.c b/src/lib/libcrypto/comp/comp_err.c new file mode 100644 index 0000000000..77a3f7070c --- /dev/null +++ b/src/lib/libcrypto/comp/comp_err.c | |||
@@ -0,0 +1,91 @@ | |||
1 | /* crypto/comp/comp_err.c */ | ||
2 | /* ==================================================================== | ||
3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions | ||
7 | * are met: | ||
8 | * | ||
9 | * 1. Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * | ||
12 | * 2. Redistributions in binary form must reproduce the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer in | ||
14 | * the documentation and/or other materials provided with the | ||
15 | * distribution. | ||
16 | * | ||
17 | * 3. All advertising materials mentioning features or use of this | ||
18 | * software must display the following acknowledgment: | ||
19 | * "This product includes software developed by the OpenSSL Project | ||
20 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
21 | * | ||
22 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
23 | * endorse or promote products derived from this software without | ||
24 | * prior written permission. For written permission, please contact | ||
25 | * openssl-core@OpenSSL.org. | ||
26 | * | ||
27 | * 5. Products derived from this software may not be called "OpenSSL" | ||
28 | * nor may "OpenSSL" appear in their names without prior written | ||
29 | * permission of the OpenSSL Project. | ||
30 | * | ||
31 | * 6. Redistributions of any form whatsoever must retain the following | ||
32 | * acknowledgment: | ||
33 | * "This product includes software developed by the OpenSSL Project | ||
34 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
35 | * | ||
36 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
37 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
38 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
39 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
40 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
41 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
42 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
43 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
44 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
45 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
46 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
47 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
48 | * ==================================================================== | ||
49 | * | ||
50 | * This product includes cryptographic software written by Eric Young | ||
51 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
52 | * Hudson (tjh@cryptsoft.com). | ||
53 | * | ||
54 | */ | ||
55 | |||
56 | /* NOTE: this file was auto generated by the mkerr.pl script: any changes | ||
57 | * made to it will be overwritten when the script next updates this file. | ||
58 | */ | ||
59 | |||
60 | #include <stdio.h> | ||
61 | #include <openssl/err.h> | ||
62 | #include <openssl/comp.h> | ||
63 | |||
64 | /* BEGIN ERROR CODES */ | ||
65 | #ifndef NO_ERR | ||
66 | static ERR_STRING_DATA COMP_str_functs[]= | ||
67 | { | ||
68 | {0,NULL} | ||
69 | }; | ||
70 | |||
71 | static ERR_STRING_DATA COMP_str_reasons[]= | ||
72 | { | ||
73 | {0,NULL} | ||
74 | }; | ||
75 | |||
76 | #endif | ||
77 | |||
78 | void ERR_load_COMP_strings(void) | ||
79 | { | ||
80 | static int init=1; | ||
81 | |||
82 | if (init) | ||
83 | { | ||
84 | init=0; | ||
85 | #ifndef NO_ERR | ||
86 | ERR_load_strings(ERR_LIB_COMP,COMP_str_functs); | ||
87 | ERR_load_strings(ERR_LIB_COMP,COMP_str_reasons); | ||
88 | #endif | ||
89 | |||
90 | } | ||
91 | } | ||
diff --git a/src/lib/libcrypto/comp/comp_lib.c b/src/lib/libcrypto/comp/comp_lib.c new file mode 100644 index 0000000000..a67ef23bc0 --- /dev/null +++ b/src/lib/libcrypto/comp/comp_lib.c | |||
@@ -0,0 +1,78 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <string.h> | ||
4 | #include <openssl/objects.h> | ||
5 | #include <openssl/comp.h> | ||
6 | |||
7 | COMP_CTX *COMP_CTX_new(COMP_METHOD *meth) | ||
8 | { | ||
9 | COMP_CTX *ret; | ||
10 | |||
11 | if ((ret=(COMP_CTX *)Malloc(sizeof(COMP_CTX))) == NULL) | ||
12 | { | ||
13 | /* ZZZZZZZZZZZZZZZZ */ | ||
14 | return(NULL); | ||
15 | } | ||
16 | memset(ret,0,sizeof(COMP_CTX)); | ||
17 | ret->meth=meth; | ||
18 | if ((ret->meth->init != NULL) && !ret->meth->init(ret)) | ||
19 | { | ||
20 | Free(ret); | ||
21 | ret=NULL; | ||
22 | } | ||
23 | #if 0 | ||
24 | else | ||
25 | CRYPTO_new_ex_data(rsa_meth,(char *)ret,&ret->ex_data); | ||
26 | #endif | ||
27 | return(ret); | ||
28 | } | ||
29 | |||
30 | void COMP_CTX_free(COMP_CTX *ctx) | ||
31 | { | ||
32 | /* CRYPTO_free_ex_data(rsa_meth,(char *)ctx,&ctx->ex_data); */ | ||
33 | |||
34 | if(ctx == NULL) | ||
35 | return; | ||
36 | |||
37 | if (ctx->meth->finish != NULL) | ||
38 | ctx->meth->finish(ctx); | ||
39 | |||
40 | Free(ctx); | ||
41 | } | ||
42 | |||
43 | int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, | ||
44 | unsigned char *in, int ilen) | ||
45 | { | ||
46 | int ret; | ||
47 | if (ctx->meth->compress == NULL) | ||
48 | { | ||
49 | /* ZZZZZZZZZZZZZZZZZ */ | ||
50 | return(-1); | ||
51 | } | ||
52 | ret=ctx->meth->compress(ctx,out,olen,in,ilen); | ||
53 | if (ret > 0) | ||
54 | { | ||
55 | ctx->compress_in+=ilen; | ||
56 | ctx->compress_out+=ret; | ||
57 | } | ||
58 | return(ret); | ||
59 | } | ||
60 | |||
61 | int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, | ||
62 | unsigned char *in, int ilen) | ||
63 | { | ||
64 | int ret; | ||
65 | |||
66 | if (ctx->meth->expand == NULL) | ||
67 | { | ||
68 | /* ZZZZZZZZZZZZZZZZZ */ | ||
69 | return(-1); | ||
70 | } | ||
71 | ret=ctx->meth->expand(ctx,out,olen,in,ilen); | ||
72 | if (ret > 0) | ||
73 | { | ||
74 | ctx->expand_in+=ilen; | ||
75 | ctx->expand_out+=ret; | ||
76 | } | ||
77 | return(ret); | ||
78 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/Makefile.ssl b/src/lib/libcrypto/pkcs12/Makefile.ssl new file mode 100644 index 0000000000..ebffab657c --- /dev/null +++ b/src/lib/libcrypto/pkcs12/Makefile.ssl | |||
@@ -0,0 +1,346 @@ | |||
1 | # | ||
2 | # SSLeay/crypto/asn1/Makefile | ||
3 | # | ||
4 | |||
5 | DIR= pkcs12 | ||
6 | TOP= ../.. | ||
7 | CC= cc | ||
8 | INCLUDES= -I.. -I../../include | ||
9 | CFLAG=-g | ||
10 | INSTALL_PREFIX= | ||
11 | OPENSSLDIR= /usr/local/ssl | ||
12 | INSTALLTOP=/usr/local/ssl | ||
13 | MAKE= make -f Makefile.ssl | ||
14 | MAKEDEPEND= $(TOP)/util/domd $(TOP) | ||
15 | MAKEFILE= Makefile.ssl | ||
16 | AR= ar r | ||
17 | |||
18 | CFLAGS= $(INCLUDES) $(CFLAG) | ||
19 | |||
20 | GENERAL=Makefile | ||
21 | TEST= | ||
22 | APPS= | ||
23 | |||
24 | LIB=$(TOP)/libcrypto.a | ||
25 | LIBSRC= p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c \ | ||
26 | p12_init.c p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c\ | ||
27 | p12_sbag.c p12_utl.c pk12err.c | ||
28 | LIBOBJ= p12_add.o p12_attr.o p12_bags.o p12_crpt.o p12_crt.o p12_decr.o \ | ||
29 | p12_init.o p12_key.o p12_kiss.o p12_lib.o p12_mac.o p12_mutl.o\ | ||
30 | p12_sbag.o p12_utl.o pk12err.o | ||
31 | |||
32 | SRC= $(LIBSRC) | ||
33 | |||
34 | EXHEADER= pkcs12.h | ||
35 | HEADER= $(EXHEADER) | ||
36 | |||
37 | ALL= $(GENERAL) $(SRC) $(HEADER) | ||
38 | |||
39 | top: | ||
40 | (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) | ||
41 | |||
42 | test: | ||
43 | |||
44 | all: lib | ||
45 | |||
46 | lib: $(LIBOBJ) | ||
47 | $(AR) $(LIB) $(LIBOBJ) | ||
48 | $(RANLIB) $(LIB) | ||
49 | @touch lib | ||
50 | |||
51 | files: | ||
52 | $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO | ||
53 | |||
54 | links: | ||
55 | @$(TOP)/util/point.sh Makefile.ssl Makefile | ||
56 | @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) | ||
57 | @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) | ||
58 | @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) | ||
59 | |||
60 | install: | ||
61 | @for i in $(EXHEADER) ; \ | ||
62 | do \ | ||
63 | (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ | ||
64 | chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ | ||
65 | done; | ||
66 | |||
67 | tags: | ||
68 | ctags $(SRC) | ||
69 | |||
70 | tests: | ||
71 | |||
72 | lint: | ||
73 | lint -DLINT $(INCLUDES) $(SRC)>fluff | ||
74 | |||
75 | depend: | ||
76 | $(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC) | ||
77 | |||
78 | dclean: | ||
79 | $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new | ||
80 | mv -f Makefile.new $(MAKEFILE) | ||
81 | |||
82 | clean: | ||
83 | rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff | ||
84 | |||
85 | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||
86 | |||
87 | p12_add.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
88 | p12_add.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
89 | p12_add.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
90 | p12_add.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
91 | p12_add.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
92 | p12_add.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
93 | p12_add.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
94 | p12_add.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
95 | p12_add.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
96 | p12_add.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
97 | p12_add.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
98 | p12_add.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
99 | p12_add.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
100 | p12_add.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
101 | p12_add.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
102 | p12_add.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
103 | p12_add.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
104 | p12_attr.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
105 | p12_attr.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
106 | p12_attr.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
107 | p12_attr.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
108 | p12_attr.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
109 | p12_attr.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
110 | p12_attr.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
111 | p12_attr.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
112 | p12_attr.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
113 | p12_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
114 | p12_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
115 | p12_attr.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
116 | p12_attr.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
117 | p12_attr.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
118 | p12_attr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
119 | p12_attr.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
120 | p12_attr.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
121 | p12_bags.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h | ||
122 | p12_bags.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h | ||
123 | p12_bags.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h | ||
124 | p12_bags.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h | ||
125 | p12_bags.o: ../../include/openssl/des.h ../../include/openssl/dh.h | ||
126 | p12_bags.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h | ||
127 | p12_bags.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h | ||
128 | p12_bags.o: ../../include/openssl/evp.h ../../include/openssl/idea.h | ||
129 | p12_bags.o: ../../include/openssl/md2.h ../../include/openssl/md5.h | ||
130 | p12_bags.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h | ||
131 | p12_bags.o: ../../include/openssl/opensslconf.h | ||
132 | p12_bags.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
133 | p12_bags.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
134 | p12_bags.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
135 | p12_bags.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
136 | p12_bags.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
137 | p12_bags.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
138 | p12_bags.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
139 | p12_crpt.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
140 | p12_crpt.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
141 | p12_crpt.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
142 | p12_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
143 | p12_crpt.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
144 | p12_crpt.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
145 | p12_crpt.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
146 | p12_crpt.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
147 | p12_crpt.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
148 | p12_crpt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
149 | p12_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
150 | p12_crpt.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
151 | p12_crpt.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
152 | p12_crpt.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
153 | p12_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
154 | p12_crpt.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
155 | p12_crpt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
156 | p12_crt.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
157 | p12_crt.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
158 | p12_crt.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
159 | p12_crt.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
160 | p12_crt.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
161 | p12_crt.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
162 | p12_crt.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
163 | p12_crt.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
164 | p12_crt.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
165 | p12_crt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
166 | p12_crt.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
167 | p12_crt.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
168 | p12_crt.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
169 | p12_crt.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
170 | p12_crt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
171 | p12_crt.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
172 | p12_crt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
173 | p12_decr.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
174 | p12_decr.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
175 | p12_decr.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
176 | p12_decr.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
177 | p12_decr.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
178 | p12_decr.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
179 | p12_decr.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
180 | p12_decr.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
181 | p12_decr.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
182 | p12_decr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
183 | p12_decr.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
184 | p12_decr.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
185 | p12_decr.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
186 | p12_decr.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
187 | p12_decr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
188 | p12_decr.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
189 | p12_decr.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
190 | p12_init.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
191 | p12_init.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
192 | p12_init.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
193 | p12_init.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
194 | p12_init.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
195 | p12_init.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
196 | p12_init.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
197 | p12_init.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
198 | p12_init.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
199 | p12_init.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
200 | p12_init.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
201 | p12_init.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
202 | p12_init.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
203 | p12_init.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
204 | p12_init.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
205 | p12_init.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
206 | p12_init.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
207 | p12_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
208 | p12_key.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
209 | p12_key.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
210 | p12_key.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
211 | p12_key.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
212 | p12_key.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
213 | p12_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
214 | p12_key.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
215 | p12_key.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
216 | p12_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
217 | p12_key.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
218 | p12_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
219 | p12_key.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
220 | p12_key.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
221 | p12_key.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
222 | p12_key.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
223 | p12_key.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
224 | p12_kiss.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
225 | p12_kiss.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
226 | p12_kiss.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
227 | p12_kiss.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
228 | p12_kiss.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
229 | p12_kiss.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
230 | p12_kiss.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
231 | p12_kiss.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
232 | p12_kiss.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
233 | p12_kiss.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
234 | p12_kiss.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
235 | p12_kiss.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
236 | p12_kiss.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
237 | p12_kiss.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
238 | p12_kiss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
239 | p12_kiss.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
240 | p12_kiss.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
241 | p12_lib.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h | ||
242 | p12_lib.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h | ||
243 | p12_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h | ||
244 | p12_lib.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h | ||
245 | p12_lib.o: ../../include/openssl/des.h ../../include/openssl/dh.h | ||
246 | p12_lib.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h | ||
247 | p12_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h | ||
248 | p12_lib.o: ../../include/openssl/evp.h ../../include/openssl/idea.h | ||
249 | p12_lib.o: ../../include/openssl/md2.h ../../include/openssl/md5.h | ||
250 | p12_lib.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h | ||
251 | p12_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h | ||
252 | p12_lib.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h | ||
253 | p12_lib.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h | ||
254 | p12_lib.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h | ||
255 | p12_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h | ||
256 | p12_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h | ||
257 | p12_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h | ||
258 | p12_lib.o: ../cryptlib.h | ||
259 | p12_mac.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h | ||
260 | p12_mac.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h | ||
261 | p12_mac.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h | ||
262 | p12_mac.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h | ||
263 | p12_mac.o: ../../include/openssl/des.h ../../include/openssl/dh.h | ||
264 | p12_mac.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h | ||
265 | p12_mac.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h | ||
266 | p12_mac.o: ../../include/openssl/evp.h ../../include/openssl/idea.h | ||
267 | p12_mac.o: ../../include/openssl/md2.h ../../include/openssl/md5.h | ||
268 | p12_mac.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h | ||
269 | p12_mac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h | ||
270 | p12_mac.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h | ||
271 | p12_mac.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h | ||
272 | p12_mac.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h | ||
273 | p12_mac.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h | ||
274 | p12_mac.o: ../../include/openssl/sha.h ../../include/openssl/stack.h | ||
275 | p12_mac.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h | ||
276 | p12_mac.o: ../cryptlib.h | ||
277 | p12_mutl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
278 | p12_mutl.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
279 | p12_mutl.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
280 | p12_mutl.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
281 | p12_mutl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
282 | p12_mutl.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
283 | p12_mutl.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
284 | p12_mutl.o: ../../include/openssl/hmac.h ../../include/openssl/idea.h | ||
285 | p12_mutl.o: ../../include/openssl/md2.h ../../include/openssl/md5.h | ||
286 | p12_mutl.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h | ||
287 | p12_mutl.o: ../../include/openssl/opensslconf.h | ||
288 | p12_mutl.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
289 | p12_mutl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h | ||
290 | p12_mutl.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h | ||
291 | p12_mutl.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h | ||
292 | p12_mutl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h | ||
293 | p12_mutl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h | ||
294 | p12_mutl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h | ||
295 | p12_mutl.o: ../cryptlib.h | ||
296 | p12_sbag.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h | ||
297 | p12_sbag.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h | ||
298 | p12_sbag.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h | ||
299 | p12_sbag.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h | ||
300 | p12_sbag.o: ../../include/openssl/des.h ../../include/openssl/dh.h | ||
301 | p12_sbag.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h | ||
302 | p12_sbag.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h | ||
303 | p12_sbag.o: ../../include/openssl/evp.h ../../include/openssl/idea.h | ||
304 | p12_sbag.o: ../../include/openssl/md2.h ../../include/openssl/md5.h | ||
305 | p12_sbag.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h | ||
306 | p12_sbag.o: ../../include/openssl/opensslconf.h | ||
307 | p12_sbag.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
308 | p12_sbag.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
309 | p12_sbag.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
310 | p12_sbag.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
311 | p12_sbag.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
312 | p12_sbag.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
313 | p12_sbag.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
314 | p12_utl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
315 | p12_utl.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
316 | p12_utl.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h | ||
317 | p12_utl.o: ../../include/openssl/crypto.h ../../include/openssl/des.h | ||
318 | p12_utl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h | ||
319 | p12_utl.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h | ||
320 | p12_utl.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
321 | p12_utl.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
322 | p12_utl.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
323 | p12_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
324 | p12_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
325 | p12_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
326 | p12_utl.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
327 | p12_utl.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
328 | p12_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
329 | p12_utl.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
330 | p12_utl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h | ||
331 | pk12err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h | ||
332 | pk12err.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h | ||
333 | pk12err.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h | ||
334 | pk12err.o: ../../include/openssl/des.h ../../include/openssl/dh.h | ||
335 | pk12err.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h | ||
336 | pk12err.o: ../../include/openssl/err.h ../../include/openssl/evp.h | ||
337 | pk12err.o: ../../include/openssl/idea.h ../../include/openssl/md2.h | ||
338 | pk12err.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h | ||
339 | pk12err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h | ||
340 | pk12err.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h | ||
341 | pk12err.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h | ||
342 | pk12err.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h | ||
343 | pk12err.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h | ||
344 | pk12err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h | ||
345 | pk12err.o: ../../include/openssl/stack.h ../../include/openssl/x509.h | ||
346 | pk12err.o: ../../include/openssl/x509_vfy.h | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_add.c b/src/lib/libcrypto/pkcs12/p12_add.c new file mode 100644 index 0000000000..ae3d9de3b4 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_add.c | |||
@@ -0,0 +1,214 @@ | |||
1 | /* p12_add.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* Pack an object into an OCTET STRING and turn into a safebag */ | ||
64 | |||
65 | PKCS12_SAFEBAG *PKCS12_pack_safebag (char *obj, int (*i2d)(), int nid1, | ||
66 | int nid2) | ||
67 | { | ||
68 | PKCS12_BAGS *bag; | ||
69 | PKCS12_SAFEBAG *safebag; | ||
70 | if (!(bag = PKCS12_BAGS_new ())) { | ||
71 | PKCS12err(PKCS12_F_PKCS12_PACK_SAFEBAG, ERR_R_MALLOC_FAILURE); | ||
72 | return NULL; | ||
73 | } | ||
74 | bag->type = OBJ_nid2obj(nid1); | ||
75 | if (!ASN1_pack_string(obj, i2d, &bag->value.octet)) { | ||
76 | PKCS12err(PKCS12_F_PKCS12_PACK_SAFEBAG, ERR_R_MALLOC_FAILURE); | ||
77 | return NULL; | ||
78 | } | ||
79 | if (!(safebag = PKCS12_SAFEBAG_new ())) { | ||
80 | PKCS12err(PKCS12_F_PKCS12_PACK_SAFEBAG, ERR_R_MALLOC_FAILURE); | ||
81 | return NULL; | ||
82 | } | ||
83 | safebag->value.bag = bag; | ||
84 | safebag->type = OBJ_nid2obj(nid2); | ||
85 | return safebag; | ||
86 | } | ||
87 | |||
88 | /* Turn PKCS8 object into a keybag */ | ||
89 | |||
90 | PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG (PKCS8_PRIV_KEY_INFO *p8) | ||
91 | { | ||
92 | PKCS12_SAFEBAG *bag; | ||
93 | if (!(bag = PKCS12_SAFEBAG_new())) { | ||
94 | PKCS12err(PKCS12_F_PKCS12_MAKE_KEYBAG,ERR_R_MALLOC_FAILURE); | ||
95 | return NULL; | ||
96 | } | ||
97 | bag->type = OBJ_nid2obj(NID_keyBag); | ||
98 | bag->value.keybag = p8; | ||
99 | return bag; | ||
100 | } | ||
101 | |||
102 | /* Turn PKCS8 object into a shrouded keybag */ | ||
103 | |||
104 | PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG (int pbe_nid, const char *pass, | ||
105 | int passlen, unsigned char *salt, int saltlen, int iter, | ||
106 | PKCS8_PRIV_KEY_INFO *p8) | ||
107 | { | ||
108 | PKCS12_SAFEBAG *bag; | ||
109 | |||
110 | /* Set up the safe bag */ | ||
111 | if (!(bag = PKCS12_SAFEBAG_new ())) { | ||
112 | PKCS12err(PKCS12_F_PKCS12_MAKE_SHKEYBAG, ERR_R_MALLOC_FAILURE); | ||
113 | return NULL; | ||
114 | } | ||
115 | |||
116 | bag->type = OBJ_nid2obj(NID_pkcs8ShroudedKeyBag); | ||
117 | if (!(bag->value.shkeybag = | ||
118 | PKCS8_encrypt(pbe_nid, NULL, pass, passlen, salt, saltlen, iter, | ||
119 | p8))) { | ||
120 | PKCS12err(PKCS12_F_PKCS12_MAKE_SHKEYBAG, ERR_R_MALLOC_FAILURE); | ||
121 | return NULL; | ||
122 | } | ||
123 | |||
124 | return bag; | ||
125 | } | ||
126 | |||
127 | /* Turn a stack of SAFEBAGS into a PKCS#7 data Contentinfo */ | ||
128 | PKCS7 *PKCS12_pack_p7data (STACK *sk) | ||
129 | { | ||
130 | PKCS7 *p7; | ||
131 | if (!(p7 = PKCS7_new())) { | ||
132 | PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE); | ||
133 | return NULL; | ||
134 | } | ||
135 | p7->type = OBJ_nid2obj(NID_pkcs7_data); | ||
136 | if (!(p7->d.data = ASN1_OCTET_STRING_new())) { | ||
137 | PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE); | ||
138 | return NULL; | ||
139 | } | ||
140 | |||
141 | if (!ASN1_seq_pack(sk, i2d_PKCS12_SAFEBAG, &p7->d.data->data, | ||
142 | &p7->d.data->length)) { | ||
143 | PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, PKCS12_R_CANT_PACK_STRUCTURE); | ||
144 | return NULL; | ||
145 | } | ||
146 | return p7; | ||
147 | } | ||
148 | |||
149 | /* Turn a stack of SAFEBAGS into a PKCS#7 encrypted data ContentInfo */ | ||
150 | |||
151 | PKCS7 *PKCS12_pack_p7encdata (int pbe_nid, const char *pass, int passlen, | ||
152 | unsigned char *salt, int saltlen, int iter, STACK *bags) | ||
153 | { | ||
154 | PKCS7 *p7; | ||
155 | X509_ALGOR *pbe; | ||
156 | if (!(p7 = PKCS7_new())) { | ||
157 | PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE); | ||
158 | return NULL; | ||
159 | } | ||
160 | p7->type = OBJ_nid2obj(NID_pkcs7_encrypted); | ||
161 | if (!(p7->d.encrypted = PKCS7_ENCRYPT_new ())) { | ||
162 | PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE); | ||
163 | return NULL; | ||
164 | } | ||
165 | ASN1_INTEGER_set (p7->d.encrypted->version, 0); | ||
166 | p7->d.encrypted->enc_data->content_type = OBJ_nid2obj(NID_pkcs7_data); | ||
167 | if (!(pbe = PKCS5_pbe_set (pbe_nid, iter, salt, saltlen))) { | ||
168 | PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE); | ||
169 | return NULL; | ||
170 | } | ||
171 | X509_ALGOR_free(p7->d.encrypted->enc_data->algorithm); | ||
172 | p7->d.encrypted->enc_data->algorithm = pbe; | ||
173 | ASN1_OCTET_STRING_free(p7->d.encrypted->enc_data->enc_data); | ||
174 | if (!(p7->d.encrypted->enc_data->enc_data = | ||
175 | PKCS12_i2d_encrypt (pbe, i2d_PKCS12_SAFEBAG, pass, passlen, | ||
176 | (char *)bags, 1))) { | ||
177 | PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, PKCS12_R_ENCRYPT_ERROR); | ||
178 | return NULL; | ||
179 | } | ||
180 | |||
181 | return p7; | ||
182 | } | ||
183 | |||
184 | X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, | ||
185 | const char *pass, int passlen, | ||
186 | unsigned char *salt, int saltlen, int iter, | ||
187 | PKCS8_PRIV_KEY_INFO *p8inf) | ||
188 | { | ||
189 | X509_SIG *p8; | ||
190 | X509_ALGOR *pbe; | ||
191 | |||
192 | if (!(p8 = X509_SIG_new())) { | ||
193 | PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_MALLOC_FAILURE); | ||
194 | return NULL; | ||
195 | } | ||
196 | |||
197 | if(pbe_nid == -1) pbe = PKCS5_pbe2_set(cipher, iter, salt, saltlen); | ||
198 | else pbe = PKCS5_pbe_set(pbe_nid, iter, salt, saltlen); | ||
199 | if(!pbe) { | ||
200 | PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_MALLOC_FAILURE); | ||
201 | return NULL; | ||
202 | } | ||
203 | X509_ALGOR_free(p8->algor); | ||
204 | p8->algor = pbe; | ||
205 | ASN1_OCTET_STRING_free(p8->digest); | ||
206 | if (!(p8->digest = | ||
207 | PKCS12_i2d_encrypt (pbe, i2d_PKCS8_PRIV_KEY_INFO, pass, passlen, | ||
208 | (char *)p8inf, 0))) { | ||
209 | PKCS12err(PKCS12_F_PKCS8_ENCRYPT, PKCS12_R_ENCRYPT_ERROR); | ||
210 | return NULL; | ||
211 | } | ||
212 | |||
213 | return p8; | ||
214 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_attr.c b/src/lib/libcrypto/pkcs12/p12_attr.c new file mode 100644 index 0000000000..31c9782b77 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_attr.c | |||
@@ -0,0 +1,238 @@ | |||
1 | /* p12_attr.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* Add a local keyid to a safebag */ | ||
64 | |||
65 | int PKCS12_add_localkeyid (PKCS12_SAFEBAG *bag, unsigned char *name, | ||
66 | int namelen) | ||
67 | { | ||
68 | X509_ATTRIBUTE *attrib; | ||
69 | ASN1_BMPSTRING *oct; | ||
70 | ASN1_TYPE *keyid; | ||
71 | if (!(keyid = ASN1_TYPE_new ())) { | ||
72 | PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); | ||
73 | return 0; | ||
74 | } | ||
75 | keyid->type = V_ASN1_OCTET_STRING; | ||
76 | if (!(oct = ASN1_OCTET_STRING_new())) { | ||
77 | PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); | ||
78 | return 0; | ||
79 | } | ||
80 | if (!ASN1_OCTET_STRING_set(oct, name, namelen)) { | ||
81 | PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); | ||
82 | return 0; | ||
83 | } | ||
84 | keyid->value.octet_string = oct; | ||
85 | if (!(attrib = X509_ATTRIBUTE_new ())) { | ||
86 | PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); | ||
87 | return 0; | ||
88 | } | ||
89 | attrib->object = OBJ_nid2obj(NID_localKeyID); | ||
90 | if (!(attrib->value.set = sk_ASN1_TYPE_new(NULL))) { | ||
91 | PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); | ||
92 | return 0; | ||
93 | } | ||
94 | sk_ASN1_TYPE_push (attrib->value.set,keyid); | ||
95 | attrib->set = 1; | ||
96 | if (!bag->attrib && !(bag->attrib = sk_X509_ATTRIBUTE_new (NULL))) { | ||
97 | PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); | ||
98 | return 0; | ||
99 | } | ||
100 | sk_X509_ATTRIBUTE_push (bag->attrib, attrib); | ||
101 | return 1; | ||
102 | } | ||
103 | |||
104 | /* Add key usage to PKCS#8 structure */ | ||
105 | |||
106 | int PKCS8_add_keyusage (PKCS8_PRIV_KEY_INFO *p8, int usage) | ||
107 | { | ||
108 | X509_ATTRIBUTE *attrib; | ||
109 | ASN1_BIT_STRING *bstr; | ||
110 | ASN1_TYPE *keyid; | ||
111 | unsigned char us_val; | ||
112 | us_val = (unsigned char) usage; | ||
113 | if (!(keyid = ASN1_TYPE_new ())) { | ||
114 | PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); | ||
115 | return 0; | ||
116 | } | ||
117 | keyid->type = V_ASN1_BIT_STRING; | ||
118 | if (!(bstr = ASN1_BIT_STRING_new())) { | ||
119 | PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); | ||
120 | return 0; | ||
121 | } | ||
122 | if (!ASN1_BIT_STRING_set(bstr, &us_val, 1)) { | ||
123 | PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); | ||
124 | return 0; | ||
125 | } | ||
126 | keyid->value.bit_string = bstr; | ||
127 | if (!(attrib = X509_ATTRIBUTE_new ())) { | ||
128 | PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); | ||
129 | return 0; | ||
130 | } | ||
131 | attrib->object = OBJ_nid2obj(NID_key_usage); | ||
132 | if (!(attrib->value.set = sk_ASN1_TYPE_new(NULL))) { | ||
133 | PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); | ||
134 | return 0; | ||
135 | } | ||
136 | sk_ASN1_TYPE_push (attrib->value.set,keyid); | ||
137 | attrib->set = 1; | ||
138 | if (!p8->attributes | ||
139 | && !(p8->attributes = sk_X509_ATTRIBUTE_new (NULL))) { | ||
140 | PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); | ||
141 | return 0; | ||
142 | } | ||
143 | sk_X509_ATTRIBUTE_push (p8->attributes, attrib); | ||
144 | return 1; | ||
145 | } | ||
146 | |||
147 | /* Add a friendlyname to a safebag */ | ||
148 | |||
149 | int PKCS12_add_friendlyname_asc (PKCS12_SAFEBAG *bag, const char *name, | ||
150 | int namelen) | ||
151 | { | ||
152 | unsigned char *uniname; | ||
153 | int ret, unilen; | ||
154 | if (!asc2uni(name, &uniname, &unilen)) { | ||
155 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC, | ||
156 | ERR_R_MALLOC_FAILURE); | ||
157 | return 0; | ||
158 | } | ||
159 | ret = PKCS12_add_friendlyname_uni (bag, uniname, unilen); | ||
160 | Free(uniname); | ||
161 | return ret; | ||
162 | } | ||
163 | |||
164 | |||
165 | int PKCS12_add_friendlyname_uni (PKCS12_SAFEBAG *bag, | ||
166 | const unsigned char *name, int namelen) | ||
167 | { | ||
168 | X509_ATTRIBUTE *attrib; | ||
169 | ASN1_BMPSTRING *bmp; | ||
170 | ASN1_TYPE *fname; | ||
171 | /* Zap ending double null if included */ | ||
172 | if(!name[namelen - 1] && !name[namelen - 2]) namelen -= 2; | ||
173 | if (!(fname = ASN1_TYPE_new ())) { | ||
174 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI, | ||
175 | ERR_R_MALLOC_FAILURE); | ||
176 | return 0; | ||
177 | } | ||
178 | fname->type = V_ASN1_BMPSTRING; | ||
179 | if (!(bmp = ASN1_BMPSTRING_new())) { | ||
180 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI, | ||
181 | ERR_R_MALLOC_FAILURE); | ||
182 | return 0; | ||
183 | } | ||
184 | if (!(bmp->data = Malloc (namelen))) { | ||
185 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI, | ||
186 | ERR_R_MALLOC_FAILURE); | ||
187 | return 0; | ||
188 | } | ||
189 | memcpy (bmp->data, name, namelen); | ||
190 | bmp->length = namelen; | ||
191 | fname->value.bmpstring = bmp; | ||
192 | if (!(attrib = X509_ATTRIBUTE_new ())) { | ||
193 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI, | ||
194 | ERR_R_MALLOC_FAILURE); | ||
195 | return 0; | ||
196 | } | ||
197 | attrib->object = OBJ_nid2obj(NID_friendlyName); | ||
198 | if (!(attrib->value.set = sk_ASN1_TYPE_new(NULL))) { | ||
199 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME, | ||
200 | ERR_R_MALLOC_FAILURE); | ||
201 | return 0; | ||
202 | } | ||
203 | sk_ASN1_TYPE_push (attrib->value.set,fname); | ||
204 | attrib->set = 1; | ||
205 | if (!bag->attrib && !(bag->attrib = sk_X509_ATTRIBUTE_new (NULL))) { | ||
206 | PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI, | ||
207 | ERR_R_MALLOC_FAILURE); | ||
208 | return 0; | ||
209 | } | ||
210 | sk_X509_ATTRIBUTE_push (bag->attrib, attrib); | ||
211 | return PKCS12_OK; | ||
212 | } | ||
213 | |||
214 | ASN1_TYPE *PKCS12_get_attr_gen (STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid) | ||
215 | { | ||
216 | X509_ATTRIBUTE *attrib; | ||
217 | int i; | ||
218 | if (!attrs) return NULL; | ||
219 | for (i = 0; i < sk_X509_ATTRIBUTE_num (attrs); i++) { | ||
220 | attrib = sk_X509_ATTRIBUTE_value (attrs, i); | ||
221 | if (OBJ_obj2nid (attrib->object) == attr_nid) { | ||
222 | if (sk_ASN1_TYPE_num (attrib->value.set)) | ||
223 | return sk_ASN1_TYPE_value(attrib->value.set, 0); | ||
224 | else return NULL; | ||
225 | } | ||
226 | } | ||
227 | return NULL; | ||
228 | } | ||
229 | |||
230 | char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag) | ||
231 | { | ||
232 | ASN1_TYPE *atype; | ||
233 | if (!(atype = PKCS12_get_attr(bag, NID_friendlyName))) return NULL; | ||
234 | if (atype->type != V_ASN1_BMPSTRING) return NULL; | ||
235 | return uni2asc(atype->value.bmpstring->data, | ||
236 | atype->value.bmpstring->length); | ||
237 | } | ||
238 | |||
diff --git a/src/lib/libcrypto/pkcs12/p12_bags.c b/src/lib/libcrypto/pkcs12/p12_bags.c new file mode 100644 index 0000000000..d6eab92c83 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_bags.c | |||
@@ -0,0 +1,192 @@ | |||
1 | /* p12_bags.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/asn1_mac.h> | ||
62 | #include <openssl/pkcs12.h> | ||
63 | |||
64 | int i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **pp) | ||
65 | { | ||
66 | int bagnid, v = 0; | ||
67 | M_ASN1_I2D_vars(a); | ||
68 | bagnid = OBJ_obj2nid (a->type); | ||
69 | M_ASN1_I2D_len (a->type, i2d_ASN1_OBJECT); | ||
70 | |||
71 | switch (bagnid) { | ||
72 | |||
73 | case NID_x509Certificate: | ||
74 | M_ASN1_I2D_len_EXP_opt (a->value.x509cert, | ||
75 | i2d_ASN1_OCTET_STRING, 0, v); | ||
76 | break; | ||
77 | |||
78 | case NID_x509Crl: | ||
79 | M_ASN1_I2D_len_EXP_opt (a->value.x509crl, | ||
80 | i2d_ASN1_OCTET_STRING, 0, v); | ||
81 | break; | ||
82 | |||
83 | case NID_sdsiCertificate: | ||
84 | M_ASN1_I2D_len_EXP_opt (a->value.sdsicert, | ||
85 | i2d_ASN1_IA5STRING, 0, v); | ||
86 | break; | ||
87 | |||
88 | default: | ||
89 | M_ASN1_I2D_len_EXP_opt (a->value.other, | ||
90 | i2d_ASN1_TYPE, 0, v); | ||
91 | break; | ||
92 | } | ||
93 | |||
94 | M_ASN1_I2D_seq_total (); | ||
95 | |||
96 | M_ASN1_I2D_put (a->type, i2d_ASN1_OBJECT); | ||
97 | |||
98 | switch (bagnid) { | ||
99 | |||
100 | case NID_x509Certificate: | ||
101 | M_ASN1_I2D_put_EXP_opt (a->value.x509cert, | ||
102 | i2d_ASN1_OCTET_STRING, 0, v); | ||
103 | break; | ||
104 | |||
105 | case NID_x509Crl: | ||
106 | M_ASN1_I2D_put_EXP_opt (a->value.x509crl, | ||
107 | i2d_ASN1_OCTET_STRING, 0, v); | ||
108 | break; | ||
109 | |||
110 | case NID_sdsiCertificate: | ||
111 | M_ASN1_I2D_put_EXP_opt (a->value.sdsicert, | ||
112 | i2d_ASN1_IA5STRING, 0, v); | ||
113 | break; | ||
114 | |||
115 | default: | ||
116 | M_ASN1_I2D_put_EXP_opt (a->value.other, i2d_ASN1_TYPE, 0, v); | ||
117 | break; | ||
118 | } | ||
119 | M_ASN1_I2D_finish(); | ||
120 | } | ||
121 | |||
122 | PKCS12_BAGS *PKCS12_BAGS_new(void) | ||
123 | { | ||
124 | PKCS12_BAGS *ret=NULL; | ||
125 | ASN1_CTX c; | ||
126 | M_ASN1_New_Malloc(ret, PKCS12_BAGS); | ||
127 | ret->type=NULL; | ||
128 | ret->value.other=NULL; | ||
129 | return (ret); | ||
130 | M_ASN1_New_Error(ASN1_F_PKCS12_BAGS_NEW); | ||
131 | } | ||
132 | |||
133 | PKCS12_BAGS *d2i_PKCS12_BAGS(PKCS12_BAGS **a, unsigned char **pp, | ||
134 | long length) | ||
135 | { | ||
136 | int bagnid; | ||
137 | M_ASN1_D2I_vars(a,PKCS12_BAGS *,PKCS12_BAGS_new); | ||
138 | M_ASN1_D2I_Init(); | ||
139 | M_ASN1_D2I_start_sequence(); | ||
140 | M_ASN1_D2I_get (ret->type, d2i_ASN1_OBJECT); | ||
141 | bagnid = OBJ_obj2nid (ret->type); | ||
142 | switch (bagnid) { | ||
143 | |||
144 | case NID_x509Certificate: | ||
145 | M_ASN1_D2I_get_EXP_opt (ret->value.x509cert, | ||
146 | d2i_ASN1_OCTET_STRING, 0); | ||
147 | break; | ||
148 | |||
149 | case NID_x509Crl: | ||
150 | M_ASN1_D2I_get_EXP_opt (ret->value.x509crl, | ||
151 | d2i_ASN1_OCTET_STRING, 0); | ||
152 | break; | ||
153 | |||
154 | case NID_sdsiCertificate: | ||
155 | M_ASN1_D2I_get_EXP_opt (ret->value.sdsicert, | ||
156 | d2i_ASN1_IA5STRING, 0); | ||
157 | break; | ||
158 | |||
159 | default: | ||
160 | M_ASN1_D2I_get_EXP_opt (ret->value.other, | ||
161 | d2i_ASN1_TYPE, 0); | ||
162 | break; | ||
163 | } | ||
164 | |||
165 | M_ASN1_D2I_Finish(a, PKCS12_BAGS_free, ASN1_F_D2I_PKCS12_BAGS); | ||
166 | } | ||
167 | |||
168 | void PKCS12_BAGS_free (PKCS12_BAGS *a) | ||
169 | { | ||
170 | if (a == NULL) return; | ||
171 | switch (OBJ_obj2nid(a->type)) { | ||
172 | |||
173 | case NID_x509Certificate: | ||
174 | ASN1_OCTET_STRING_free (a->value.x509cert); | ||
175 | break; | ||
176 | |||
177 | case NID_x509Crl: | ||
178 | ASN1_OCTET_STRING_free (a->value.x509crl); | ||
179 | break; | ||
180 | |||
181 | case NID_sdsiCertificate: | ||
182 | ASN1_IA5STRING_free (a->value.sdsicert); | ||
183 | break; | ||
184 | |||
185 | default: | ||
186 | ASN1_TYPE_free (a->value.other); | ||
187 | break; | ||
188 | } | ||
189 | |||
190 | ASN1_OBJECT_free (a->type); | ||
191 | Free ((char *)a); | ||
192 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_crpt.c b/src/lib/libcrypto/pkcs12/p12_crpt.c new file mode 100644 index 0000000000..6de6f8128f --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_crpt.c | |||
@@ -0,0 +1,122 @@ | |||
1 | /* p12_crpt.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* PKCS#12 specific PBE functions */ | ||
64 | |||
65 | void PKCS12_PBE_add(void) | ||
66 | { | ||
67 | #ifndef NO_RC4 | ||
68 | EVP_PBE_alg_add(NID_pbe_WithSHA1And128BitRC4, EVP_rc4(), EVP_sha1(), | ||
69 | PKCS12_PBE_keyivgen); | ||
70 | EVP_PBE_alg_add(NID_pbe_WithSHA1And40BitRC4, EVP_rc4_40(), EVP_sha1(), | ||
71 | PKCS12_PBE_keyivgen); | ||
72 | #endif | ||
73 | EVP_PBE_alg_add(NID_pbe_WithSHA1And3_Key_TripleDES_CBC, | ||
74 | EVP_des_ede3_cbc(), EVP_sha1(), PKCS12_PBE_keyivgen); | ||
75 | EVP_PBE_alg_add(NID_pbe_WithSHA1And2_Key_TripleDES_CBC, | ||
76 | EVP_des_ede_cbc(), EVP_sha1(), PKCS12_PBE_keyivgen); | ||
77 | #ifndef NO_RC2 | ||
78 | EVP_PBE_alg_add(NID_pbe_WithSHA1And128BitRC2_CBC, EVP_rc2_cbc(), | ||
79 | EVP_sha1(), PKCS12_PBE_keyivgen); | ||
80 | EVP_PBE_alg_add(NID_pbe_WithSHA1And40BitRC2_CBC, EVP_rc2_40_cbc(), | ||
81 | EVP_sha1(), PKCS12_PBE_keyivgen); | ||
82 | #endif | ||
83 | } | ||
84 | |||
85 | int PKCS12_PBE_keyivgen (EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | ||
86 | ASN1_TYPE *param, EVP_CIPHER *cipher, EVP_MD *md, int en_de) | ||
87 | { | ||
88 | PBEPARAM *pbe; | ||
89 | int saltlen, iter; | ||
90 | unsigned char *salt, *pbuf; | ||
91 | unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; | ||
92 | |||
93 | /* Extract useful info from parameter */ | ||
94 | pbuf = param->value.sequence->data; | ||
95 | if (!param || (param->type != V_ASN1_SEQUENCE) || | ||
96 | !(pbe = d2i_PBEPARAM (NULL, &pbuf, param->value.sequence->length))) { | ||
97 | EVPerr(PKCS12_F_PKCS12_PBE_KEYIVGEN,EVP_R_DECODE_ERROR); | ||
98 | return 0; | ||
99 | } | ||
100 | |||
101 | if (!pbe->iter) iter = 1; | ||
102 | else iter = ASN1_INTEGER_get (pbe->iter); | ||
103 | salt = pbe->salt->data; | ||
104 | saltlen = pbe->salt->length; | ||
105 | if (!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_KEY_ID, | ||
106 | iter, EVP_CIPHER_key_length(cipher), key, md)) { | ||
107 | PKCS12err(PKCS12_F_PKCS12_PBE_KEYIVGEN,PKCS12_R_KEY_GEN_ERROR); | ||
108 | PBEPARAM_free(pbe); | ||
109 | return 0; | ||
110 | } | ||
111 | if (!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_IV_ID, | ||
112 | iter, EVP_CIPHER_iv_length(cipher), iv, md)) { | ||
113 | PKCS12err(PKCS12_F_PKCS12_PBE_KEYIVGEN,PKCS12_R_IV_GEN_ERROR); | ||
114 | PBEPARAM_free(pbe); | ||
115 | return 0; | ||
116 | } | ||
117 | PBEPARAM_free(pbe); | ||
118 | EVP_CipherInit(ctx, cipher, key, iv, en_de); | ||
119 | memset(key, 0, EVP_MAX_KEY_LENGTH); | ||
120 | memset(iv, 0, EVP_MAX_IV_LENGTH); | ||
121 | return 1; | ||
122 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_crt.c b/src/lib/libcrypto/pkcs12/p12_crt.c new file mode 100644 index 0000000000..56d88b0759 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_crt.c | |||
@@ -0,0 +1,159 @@ | |||
1 | /* p12_crt.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, | ||
64 | STACK *ca, int nid_key, int nid_cert, int iter, int mac_iter, | ||
65 | int keytype) | ||
66 | { | ||
67 | PKCS12 *p12; | ||
68 | STACK *bags, *safes; | ||
69 | PKCS12_SAFEBAG *bag; | ||
70 | PKCS8_PRIV_KEY_INFO *p8; | ||
71 | PKCS7 *authsafe; | ||
72 | X509 *tcert; | ||
73 | int i; | ||
74 | unsigned char keyid[EVP_MAX_MD_SIZE]; | ||
75 | unsigned int keyidlen; | ||
76 | |||
77 | /* Set defaults */ | ||
78 | if(!nid_cert) nid_cert = NID_pbe_WithSHA1And40BitRC2_CBC; | ||
79 | if(!nid_key) nid_key = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; | ||
80 | if(!iter) iter = PKCS12_DEFAULT_ITER; | ||
81 | if(!mac_iter) mac_iter = 1; | ||
82 | |||
83 | if(!pkey || !cert) { | ||
84 | PKCS12err(PKCS12_F_PKCS12_CREATE,PKCS12_R_INVALID_NULL_ARGUMENT); | ||
85 | return NULL; | ||
86 | } | ||
87 | |||
88 | if(!(bags = sk_new (NULL))) { | ||
89 | PKCS12err(PKCS12_F_PKCS12_CREATE,ERR_R_MALLOC_FAILURE); | ||
90 | return NULL; | ||
91 | } | ||
92 | |||
93 | /* Add user certificate */ | ||
94 | if(!(bag = M_PKCS12_x5092certbag(cert))) return NULL; | ||
95 | if(name && !PKCS12_add_friendlyname(bag, name, -1)) return NULL; | ||
96 | X509_digest(cert, EVP_sha1(), keyid, &keyidlen); | ||
97 | if(!PKCS12_add_localkeyid(bag, keyid, keyidlen)) return NULL; | ||
98 | |||
99 | if(!sk_push(bags, (char *)bag)) { | ||
100 | PKCS12err(PKCS12_F_PKCS12_CREATE,ERR_R_MALLOC_FAILURE); | ||
101 | return NULL; | ||
102 | } | ||
103 | |||
104 | /* Add all other certificates */ | ||
105 | if(ca) { | ||
106 | for(i = 0; i < sk_num(ca); i++) { | ||
107 | tcert = (X509 *)sk_value(ca, i); | ||
108 | if(!(bag = M_PKCS12_x5092certbag(tcert))) return NULL; | ||
109 | if(!sk_push(bags, (char *)bag)) { | ||
110 | PKCS12err(PKCS12_F_PKCS12_CREATE,ERR_R_MALLOC_FAILURE); | ||
111 | return NULL; | ||
112 | } | ||
113 | } | ||
114 | } | ||
115 | |||
116 | /* Turn certbags into encrypted authsafe */ | ||
117 | authsafe = PKCS12_pack_p7encdata (nid_cert, pass, -1, NULL, 0, | ||
118 | iter, bags); | ||
119 | sk_pop_free(bags, PKCS12_SAFEBAG_free); | ||
120 | |||
121 | if (!authsafe) return NULL; | ||
122 | |||
123 | if(!(safes = sk_new (NULL)) || !sk_push(safes, (char *)authsafe)) { | ||
124 | PKCS12err(PKCS12_F_PKCS12_CREATE,ERR_R_MALLOC_FAILURE); | ||
125 | return NULL; | ||
126 | } | ||
127 | |||
128 | /* Make a shrouded key bag */ | ||
129 | if(!(p8 = EVP_PKEY2PKCS8 (pkey))) return NULL; | ||
130 | if(keytype && !PKCS8_add_keyusage(p8, keytype)) return NULL; | ||
131 | bag = PKCS12_MAKE_SHKEYBAG (nid_key, pass, -1, NULL, 0, iter, p8); | ||
132 | if(!bag) return NULL; | ||
133 | PKCS8_PRIV_KEY_INFO_free(p8); | ||
134 | if (name && !PKCS12_add_friendlyname (bag, name, -1)) return NULL; | ||
135 | if(!PKCS12_add_localkeyid (bag, keyid, keyidlen)) return NULL; | ||
136 | if(!(bags = sk_new(NULL)) || !sk_push (bags, (char *)bag)) { | ||
137 | PKCS12err(PKCS12_F_PKCS12_CREATE,ERR_R_MALLOC_FAILURE); | ||
138 | return NULL; | ||
139 | } | ||
140 | /* Turn it into unencrypted safe bag */ | ||
141 | if(!(authsafe = PKCS12_pack_p7data (bags))) return NULL; | ||
142 | sk_pop_free(bags, PKCS12_SAFEBAG_free); | ||
143 | if(!sk_push(safes, (char *)authsafe)) { | ||
144 | PKCS12err(PKCS12_F_PKCS12_CREATE,ERR_R_MALLOC_FAILURE); | ||
145 | return NULL; | ||
146 | } | ||
147 | |||
148 | if(!(p12 = PKCS12_init (NID_pkcs7_data))) return NULL; | ||
149 | |||
150 | if(!M_PKCS12_pack_authsafes (p12, safes)) return NULL; | ||
151 | |||
152 | sk_pop_free(safes, PKCS7_free); | ||
153 | |||
154 | if(!PKCS12_set_mac (p12, pass, -1, NULL, 0, mac_iter, NULL)) | ||
155 | return NULL; | ||
156 | |||
157 | return p12; | ||
158 | |||
159 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_decr.c b/src/lib/libcrypto/pkcs12/p12_decr.c new file mode 100644 index 0000000000..d3d288e187 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_decr.c | |||
@@ -0,0 +1,185 @@ | |||
1 | /* p12_decr.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* Define this to dump decrypted output to files called DERnnn */ | ||
64 | /*#define DEBUG_DECRYPT*/ | ||
65 | |||
66 | |||
67 | /* Encrypt/Decrypt a buffer based on password and algor, result in a | ||
68 | * Malloc'ed buffer | ||
69 | */ | ||
70 | |||
71 | unsigned char * PKCS12_pbe_crypt (X509_ALGOR *algor, const char *pass, | ||
72 | int passlen, unsigned char *in, int inlen, unsigned char **data, | ||
73 | int *datalen, int en_de) | ||
74 | { | ||
75 | unsigned char *out; | ||
76 | int outlen, i; | ||
77 | EVP_CIPHER_CTX ctx; | ||
78 | |||
79 | /* Decrypt data */ | ||
80 | if (!EVP_PBE_CipherInit (algor->algorithm, pass, passlen, | ||
81 | algor->parameter, &ctx, en_de)) { | ||
82 | PKCS12err(PKCS12_F_PKCS12_PBE_CRYPT,PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR); | ||
83 | return NULL; | ||
84 | } | ||
85 | |||
86 | if(!(out = Malloc (inlen + EVP_CIPHER_CTX_block_size(&ctx)))) { | ||
87 | PKCS12err(PKCS12_F_PKCS12_PBE_CRYPT,ERR_R_MALLOC_FAILURE); | ||
88 | return NULL; | ||
89 | } | ||
90 | |||
91 | EVP_CipherUpdate (&ctx, out, &i, in, inlen); | ||
92 | outlen = i; | ||
93 | if(!EVP_CipherFinal (&ctx, out + i, &i)) { | ||
94 | Free (out); | ||
95 | PKCS12err(PKCS12_F_PKCS12_PBE_CRYPT,PKCS12_R_PKCS12_CIPHERFINAL_ERROR); | ||
96 | return NULL; | ||
97 | } | ||
98 | outlen += i; | ||
99 | if (datalen) *datalen = outlen; | ||
100 | if (data) *data = out; | ||
101 | return out; | ||
102 | |||
103 | } | ||
104 | |||
105 | /* Decrypt an OCTET STRING and decode ASN1 structure | ||
106 | * if seq & 1 'obj' is a stack of structures to be encoded | ||
107 | * if seq & 2 zero buffer after use | ||
108 | * as a sequence. | ||
109 | */ | ||
110 | |||
111 | char * PKCS12_decrypt_d2i (X509_ALGOR *algor, char * (*d2i)(), | ||
112 | void (*free_func)(), const char *pass, int passlen, | ||
113 | ASN1_OCTET_STRING *oct, int seq) | ||
114 | { | ||
115 | unsigned char *out, *p; | ||
116 | char *ret; | ||
117 | int outlen; | ||
118 | |||
119 | if (!PKCS12_pbe_crypt (algor, pass, passlen, oct->data, oct->length, | ||
120 | &out, &outlen, 0)) { | ||
121 | PKCS12err(PKCS12_F_PKCS12_DECRYPT_D2I,PKCS12_R_PKCS12_PBE_CRYPT_ERROR); | ||
122 | return NULL; | ||
123 | } | ||
124 | p = out; | ||
125 | #ifdef DEBUG_DECRYPT | ||
126 | { | ||
127 | FILE *op; | ||
128 | |||
129 | char fname[30]; | ||
130 | static int fnm = 1; | ||
131 | sprintf(fname, "DER%d", fnm++); | ||
132 | op = fopen(fname, "wb"); | ||
133 | fwrite (p, 1, outlen, op); | ||
134 | fclose(op); | ||
135 | } | ||
136 | #endif | ||
137 | if (seq & 1) ret = (char *) d2i_ASN1_SET(NULL, &p, outlen, d2i, | ||
138 | free_func, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); | ||
139 | else ret = d2i(NULL, &p, outlen); | ||
140 | if (seq & 2) memset(out, 0, outlen); | ||
141 | if(!ret) PKCS12err(PKCS12_F_PKCS12_DECRYPT_D2I,PKCS12_R_DECODE_ERROR); | ||
142 | Free (out); | ||
143 | return ret; | ||
144 | } | ||
145 | |||
146 | /* Encode ASN1 structure and encrypt, return OCTET STRING | ||
147 | * if 'seq' is non-zero 'obj' is a stack of structures to be encoded | ||
148 | * as a sequence | ||
149 | */ | ||
150 | |||
151 | ASN1_OCTET_STRING *PKCS12_i2d_encrypt (X509_ALGOR *algor, int (*i2d)(), | ||
152 | const char *pass, int passlen, | ||
153 | char *obj, int seq) | ||
154 | { | ||
155 | ASN1_OCTET_STRING *oct; | ||
156 | unsigned char *in, *p; | ||
157 | int inlen; | ||
158 | if (!(oct = ASN1_OCTET_STRING_new ())) { | ||
159 | PKCS12err(PKCS12_F_PKCS12_I2D_ENCRYPT,ERR_R_MALLOC_FAILURE); | ||
160 | return NULL; | ||
161 | } | ||
162 | if (seq) inlen = i2d_ASN1_SET((STACK *)obj, NULL, i2d, V_ASN1_SEQUENCE, | ||
163 | V_ASN1_UNIVERSAL, IS_SEQUENCE); | ||
164 | else inlen = i2d (obj, NULL); | ||
165 | if (!inlen) { | ||
166 | PKCS12err(PKCS12_F_PKCS12_I2D_ENCRYPT,PKCS12_R_ENCODE_ERROR); | ||
167 | return NULL; | ||
168 | } | ||
169 | if (!(in = Malloc (inlen))) { | ||
170 | PKCS12err(PKCS12_F_PKCS12_I2D_ENCRYPT,ERR_R_MALLOC_FAILURE); | ||
171 | return NULL; | ||
172 | } | ||
173 | p = in; | ||
174 | if (seq) i2d_ASN1_SET((STACK *)obj, &p, i2d, V_ASN1_SEQUENCE, | ||
175 | V_ASN1_UNIVERSAL, IS_SEQUENCE); | ||
176 | else i2d (obj, &p); | ||
177 | if (!PKCS12_pbe_crypt (algor, pass, passlen, in, inlen, &oct->data, | ||
178 | &oct->length, 1)) { | ||
179 | PKCS12err(PKCS12_F_PKCS12_I2D_ENCRYPT,PKCS12_R_ENCRYPT_ERROR); | ||
180 | Free(in); | ||
181 | return NULL; | ||
182 | } | ||
183 | Free (in); | ||
184 | return oct; | ||
185 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_init.c b/src/lib/libcrypto/pkcs12/p12_init.c new file mode 100644 index 0000000000..dc6ab41db8 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_init.c | |||
@@ -0,0 +1,98 @@ | |||
1 | /* p12_init.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* Initialise a PKCS12 structure to take data */ | ||
64 | |||
65 | PKCS12 *PKCS12_init (int mode) | ||
66 | { | ||
67 | PKCS12 *pkcs12; | ||
68 | if (!(pkcs12 = PKCS12_new())) { | ||
69 | PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE); | ||
70 | return NULL; | ||
71 | } | ||
72 | if (!(pkcs12->version = ASN1_INTEGER_new ())) { | ||
73 | PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE); | ||
74 | return NULL; | ||
75 | } | ||
76 | ASN1_INTEGER_set (pkcs12->version, 3); | ||
77 | if (!(pkcs12->authsafes = PKCS7_new())) { | ||
78 | PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE); | ||
79 | return NULL; | ||
80 | } | ||
81 | pkcs12->authsafes->type = OBJ_nid2obj(mode); | ||
82 | switch (mode) { | ||
83 | case NID_pkcs7_data: | ||
84 | if (!(pkcs12->authsafes->d.data = | ||
85 | ASN1_OCTET_STRING_new())) { | ||
86 | PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE); | ||
87 | return NULL; | ||
88 | } | ||
89 | break; | ||
90 | default: | ||
91 | PKCS12err(PKCS12_F_PKCS12_INIT,PKCS12_R_UNSUPPORTED_PKCS12_MODE); | ||
92 | PKCS12_free(pkcs12); | ||
93 | return NULL; | ||
94 | break; | ||
95 | } | ||
96 | |||
97 | return pkcs12; | ||
98 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_key.c b/src/lib/libcrypto/pkcs12/p12_key.c new file mode 100644 index 0000000000..25d8cdae57 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_key.c | |||
@@ -0,0 +1,182 @@ | |||
1 | /* p12_key.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | |||
64 | /* Uncomment out this line to get debugging info about key generation */ | ||
65 | /*#define DEBUG_KEYGEN*/ | ||
66 | #ifdef DEBUG_KEYGEN | ||
67 | #include <bio.h> | ||
68 | extern BIO *bio_err; | ||
69 | void h__dump (unsigned char *p, int len); | ||
70 | #endif | ||
71 | |||
72 | /* PKCS12 compatible key/IV generation */ | ||
73 | #ifndef min | ||
74 | #define min(a,b) ((a) < (b) ? (a) : (b)) | ||
75 | #endif | ||
76 | |||
77 | int PKCS12_key_gen_asc (const char *pass, int passlen, unsigned char *salt, | ||
78 | int saltlen, int id, int iter, int n, unsigned char *out, | ||
79 | const EVP_MD *md_type) | ||
80 | { | ||
81 | int ret; | ||
82 | unsigned char *unipass; | ||
83 | int uniplen; | ||
84 | if (!asc2uni (pass, &unipass, &uniplen)) { | ||
85 | PKCS12err(PKCS12_F_PKCS12_KEY_GEN_ASC,ERR_R_MALLOC_FAILURE); | ||
86 | return 0; | ||
87 | } | ||
88 | ret = PKCS12_key_gen_uni (unipass, uniplen, salt, saltlen, | ||
89 | id, iter, n, out, md_type); | ||
90 | memset(unipass, 0, uniplen); /* Clear password from memory */ | ||
91 | Free(unipass); | ||
92 | return ret; | ||
93 | } | ||
94 | |||
95 | int PKCS12_key_gen_uni (unsigned char *pass, int passlen, unsigned char *salt, | ||
96 | int saltlen, int id, int iter, int n, unsigned char *out, | ||
97 | const EVP_MD *md_type) | ||
98 | { | ||
99 | unsigned char *B, *D, *I, *p, *Ai; | ||
100 | int Slen, Plen, Ilen; | ||
101 | int i, j, u, v; | ||
102 | BIGNUM *Ij, *Bpl1; /* These hold Ij and B + 1 */ | ||
103 | EVP_MD_CTX ctx; | ||
104 | #ifdef DEBUG_KEYGEN | ||
105 | unsigned char *tmpout = out; | ||
106 | int tmpn = n; | ||
107 | BIO_printf (bio_err, "KEYGEN DEBUG\n"); | ||
108 | BIO_printf (bio_err, "ID %d, ITER %d\n", id, iter); | ||
109 | BIO_printf (bio_err, "Password (length %d):\n", passlen); | ||
110 | h__dump (pass, passlen); | ||
111 | BIO_printf (bio_err, "Salt (length %d):\n", saltlen); | ||
112 | h__dump (salt, saltlen); | ||
113 | BIO_printf (bio_err, "ID %d, ITER %d\n\n", id, iter); | ||
114 | #endif | ||
115 | v = EVP_MD_block_size (md_type); | ||
116 | u = EVP_MD_size (md_type); | ||
117 | D = Malloc (v); | ||
118 | Ai = Malloc (u); | ||
119 | B = Malloc (v + 1); | ||
120 | Slen = v * ((saltlen+v-1)/v); | ||
121 | Plen = v * ((passlen+v-1)/v); | ||
122 | Ilen = Slen + Plen; | ||
123 | I = Malloc (Ilen); | ||
124 | Ij = BN_new(); | ||
125 | Bpl1 = BN_new(); | ||
126 | if (!D || !Ai || !B || !I || !Ij || !Bpl1) { | ||
127 | PKCS12err(PKCS12_F_PKCS12_KEY_GEN_UNI,ERR_R_MALLOC_FAILURE); | ||
128 | return 0; | ||
129 | } | ||
130 | for (i = 0; i < v; i++) D[i] = id; | ||
131 | p = I; | ||
132 | for (i = 0; i < Slen; i++) *p++ = salt[i % saltlen]; | ||
133 | for (i = 0; i < Plen; i++) *p++ = pass[i % passlen]; | ||
134 | for (;;) { | ||
135 | EVP_DigestInit (&ctx, md_type); | ||
136 | EVP_DigestUpdate (&ctx, D, v); | ||
137 | EVP_DigestUpdate (&ctx, I, Ilen); | ||
138 | EVP_DigestFinal (&ctx, Ai, NULL); | ||
139 | for (j = 1; j < iter; j++) { | ||
140 | EVP_DigestInit (&ctx, md_type); | ||
141 | EVP_DigestUpdate (&ctx, Ai, u); | ||
142 | EVP_DigestFinal (&ctx, Ai, NULL); | ||
143 | } | ||
144 | memcpy (out, Ai, min (n, u)); | ||
145 | if (u >= n) { | ||
146 | Free (Ai); | ||
147 | Free (B); | ||
148 | Free (D); | ||
149 | Free (I); | ||
150 | BN_free (Ij); | ||
151 | BN_free (Bpl1); | ||
152 | #ifdef DEBUG_KEYGEN | ||
153 | BIO_printf (bio_err, "Output KEY (length %d)\n", tmpn); | ||
154 | h__dump (tmpout, tmpn); | ||
155 | #endif | ||
156 | return 1; | ||
157 | } | ||
158 | n -= u; | ||
159 | out += u; | ||
160 | for (j = 0; j < v; j++) B[j] = Ai[j % u]; | ||
161 | /* Work out B + 1 first then can use B as tmp space */ | ||
162 | BN_bin2bn (B, v, Bpl1); | ||
163 | BN_add_word (Bpl1, 1); | ||
164 | for (j = 0; j < Ilen ; j+=v) { | ||
165 | BN_bin2bn (I + j, v, Ij); | ||
166 | BN_add (Ij, Ij, Bpl1); | ||
167 | BN_bn2bin (Ij, B); | ||
168 | /* If more than 2^(v*8) - 1 cut off MSB */ | ||
169 | if (BN_num_bytes (Ij) > v) { | ||
170 | BN_bn2bin (Ij, B); | ||
171 | memcpy (I + j, B + 1, v); | ||
172 | } else BN_bn2bin (Ij, I + j); | ||
173 | } | ||
174 | } | ||
175 | } | ||
176 | #ifdef DEBUG_KEYGEN | ||
177 | void h__dump (unsigned char *p, int len) | ||
178 | { | ||
179 | for (; len --; p++) BIO_printf (bio_err, "%02X", *p); | ||
180 | BIO_printf (bio_err, "\n"); | ||
181 | } | ||
182 | #endif | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_kiss.c b/src/lib/libcrypto/pkcs12/p12_kiss.c new file mode 100644 index 0000000000..767e1303da --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_kiss.c | |||
@@ -0,0 +1,238 @@ | |||
1 | /* p12_kiss.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* Simplified PKCS#12 routines */ | ||
64 | |||
65 | static int parse_pk12( PKCS12 *p12, const char *pass, int passlen, EVP_PKEY **pkey, X509 **cert, STACK **ca); | ||
66 | static int parse_bags( STACK *bags, const char *pass, int passlen, EVP_PKEY **pkey, X509 **cert, STACK **ca, ASN1_OCTET_STRING **keyid, char *keymatch); | ||
67 | static int parse_bag( PKCS12_SAFEBAG *bag, const char *pass, int passlen, EVP_PKEY **pkey, X509 **cert, STACK **ca, ASN1_OCTET_STRING **keyid, char *keymatch); | ||
68 | /* Parse and decrypt a PKCS#12 structure returning user key, user cert | ||
69 | * and other (CA) certs. Note either ca should be NULL, *ca should be NULL, | ||
70 | * or it should point to a valid STACK structure. pkey and cert can be | ||
71 | * passed unitialised. | ||
72 | */ | ||
73 | |||
74 | int PKCS12_parse (PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, | ||
75 | STACK **ca) | ||
76 | { | ||
77 | |||
78 | /* Check for NULL PKCS12 structure */ | ||
79 | |||
80 | if(!p12) { | ||
81 | PKCS12err(PKCS12_F_PKCS12_PARSE,PKCS12_R_INVALID_NULL_PKCS12_POINTER); | ||
82 | return 0; | ||
83 | } | ||
84 | |||
85 | /* Allocate stack for ca certificates if needed */ | ||
86 | if ((ca != NULL) && (*ca == NULL)) { | ||
87 | if (!(*ca = sk_new(NULL))) { | ||
88 | PKCS12err(PKCS12_F_PKCS12_PARSE,ERR_R_MALLOC_FAILURE); | ||
89 | return 0; | ||
90 | } | ||
91 | } | ||
92 | |||
93 | if(pkey) *pkey = NULL; | ||
94 | if(cert) *cert = NULL; | ||
95 | |||
96 | /* Check the mac */ | ||
97 | |||
98 | if (!PKCS12_verify_mac (p12, pass, -1)) { | ||
99 | PKCS12err(PKCS12_F_PKCS12_PARSE,PKCS12_R_MAC_VERIFY_FAILURE); | ||
100 | goto err; | ||
101 | } | ||
102 | |||
103 | if (!parse_pk12 (p12, pass, -1, pkey, cert, ca)) { | ||
104 | PKCS12err(PKCS12_F_PKCS12_PARSE,PKCS12_R_PARSE_ERROR); | ||
105 | goto err; | ||
106 | } | ||
107 | |||
108 | return 1; | ||
109 | |||
110 | err: | ||
111 | |||
112 | if (pkey && *pkey) EVP_PKEY_free (*pkey); | ||
113 | if (cert && *cert) X509_free (*cert); | ||
114 | if (ca) sk_pop_free (*ca, X509_free); | ||
115 | return 0; | ||
116 | |||
117 | } | ||
118 | |||
119 | /* Parse the outer PKCS#12 structure */ | ||
120 | |||
121 | static int parse_pk12 (PKCS12 *p12, const char *pass, int passlen, | ||
122 | EVP_PKEY **pkey, X509 **cert, STACK **ca) | ||
123 | { | ||
124 | STACK *asafes, *bags; | ||
125 | int i, bagnid; | ||
126 | PKCS7 *p7; | ||
127 | ASN1_OCTET_STRING *keyid = NULL; | ||
128 | char keymatch = 0; | ||
129 | if (!( asafes = M_PKCS12_unpack_authsafes (p12))) return 0; | ||
130 | for (i = 0; i < sk_num (asafes); i++) { | ||
131 | p7 = (PKCS7 *) sk_value (asafes, i); | ||
132 | bagnid = OBJ_obj2nid (p7->type); | ||
133 | if (bagnid == NID_pkcs7_data) { | ||
134 | bags = M_PKCS12_unpack_p7data (p7); | ||
135 | } else if (bagnid == NID_pkcs7_encrypted) { | ||
136 | bags = M_PKCS12_unpack_p7encdata (p7, pass, passlen); | ||
137 | } else continue; | ||
138 | if (!bags) { | ||
139 | sk_pop_free (asafes, PKCS7_free); | ||
140 | return 0; | ||
141 | } | ||
142 | if (!parse_bags (bags, pass, passlen, pkey, cert, ca, | ||
143 | &keyid, &keymatch)) { | ||
144 | sk_pop_free (bags, PKCS12_SAFEBAG_free); | ||
145 | sk_pop_free (asafes, PKCS7_free); | ||
146 | return 0; | ||
147 | } | ||
148 | sk_pop_free (bags, PKCS12_SAFEBAG_free); | ||
149 | } | ||
150 | sk_pop_free (asafes, PKCS7_free); | ||
151 | if (keyid) ASN1_OCTET_STRING_free (keyid); | ||
152 | return 1; | ||
153 | } | ||
154 | |||
155 | |||
156 | static int parse_bags (STACK *bags, const char *pass, int passlen, | ||
157 | EVP_PKEY **pkey, X509 **cert, STACK **ca, | ||
158 | ASN1_OCTET_STRING **keyid, char *keymatch) | ||
159 | { | ||
160 | int i; | ||
161 | for (i = 0; i < sk_num (bags); i++) { | ||
162 | if (!parse_bag ((PKCS12_SAFEBAG *)sk_value (bags, i), | ||
163 | pass, passlen, pkey, cert, ca, keyid, | ||
164 | keymatch)) return 0; | ||
165 | } | ||
166 | return 1; | ||
167 | } | ||
168 | |||
169 | #define MATCH_KEY 0x1 | ||
170 | #define MATCH_CERT 0x2 | ||
171 | #define MATCH_ALL 0x3 | ||
172 | |||
173 | static int parse_bag (PKCS12_SAFEBAG *bag, const char *pass, int passlen, | ||
174 | EVP_PKEY **pkey, X509 **cert, STACK **ca, | ||
175 | ASN1_OCTET_STRING **keyid, | ||
176 | char *keymatch) | ||
177 | { | ||
178 | PKCS8_PRIV_KEY_INFO *p8; | ||
179 | X509 *x509; | ||
180 | ASN1_OCTET_STRING *lkey = NULL; | ||
181 | ASN1_TYPE *attrib; | ||
182 | |||
183 | |||
184 | if ((attrib = PKCS12_get_attr (bag, NID_localKeyID))) | ||
185 | lkey = attrib->value.octet_string; | ||
186 | |||
187 | /* Check for any local key id matching (if needed) */ | ||
188 | if (lkey && ((*keymatch & MATCH_ALL) != MATCH_ALL)) { | ||
189 | if (*keyid) { | ||
190 | if (ASN1_OCTET_STRING_cmp (*keyid, lkey)) lkey = NULL; | ||
191 | } else { | ||
192 | if (!(*keyid = ASN1_OCTET_STRING_dup (lkey))) { | ||
193 | PKCS12err(PKCS12_F_PARSE_BAGS,ERR_R_MALLOC_FAILURE); | ||
194 | return 0; | ||
195 | } | ||
196 | } | ||
197 | } | ||
198 | |||
199 | switch (M_PKCS12_bag_type(bag)) | ||
200 | { | ||
201 | case NID_keyBag: | ||
202 | if (!lkey || !pkey) return 1; | ||
203 | if (!(*pkey = EVP_PKCS82PKEY (bag->value.keybag))) return 0; | ||
204 | *keymatch |= MATCH_KEY; | ||
205 | break; | ||
206 | |||
207 | case NID_pkcs8ShroudedKeyBag: | ||
208 | if (!lkey || !pkey) return 1; | ||
209 | if (!(p8 = M_PKCS12_decrypt_skey (bag, pass, passlen))) | ||
210 | return 0; | ||
211 | *pkey = EVP_PKCS82PKEY (p8); | ||
212 | PKCS8_PRIV_KEY_INFO_free (p8); | ||
213 | if (!(*pkey)) return 0; | ||
214 | *keymatch |= MATCH_KEY; | ||
215 | break; | ||
216 | |||
217 | case NID_certBag: | ||
218 | if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate ) | ||
219 | return 1; | ||
220 | if (!(x509 = M_PKCS12_certbag2x509(bag))) return 0; | ||
221 | if (lkey) { | ||
222 | *keymatch |= MATCH_CERT; | ||
223 | if (cert) *cert = x509; | ||
224 | } else if (ca) sk_push (*ca, (char *)x509); | ||
225 | break; | ||
226 | |||
227 | case NID_safeContentsBag: | ||
228 | return parse_bags(bag->value.safes, pass, passlen, | ||
229 | pkey, cert, ca, keyid, keymatch); | ||
230 | break; | ||
231 | |||
232 | default: | ||
233 | return 1; | ||
234 | break; | ||
235 | } | ||
236 | return 1; | ||
237 | } | ||
238 | |||
diff --git a/src/lib/libcrypto/pkcs12/p12_lib.c b/src/lib/libcrypto/pkcs12/p12_lib.c new file mode 100644 index 0000000000..00a6695d9b --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_lib.c | |||
@@ -0,0 +1,111 @@ | |||
1 | /* p12_lib.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/asn1_mac.h> | ||
62 | #include <openssl/pkcs12.h> | ||
63 | |||
64 | int i2d_PKCS12(PKCS12 *a, unsigned char **pp) | ||
65 | { | ||
66 | M_ASN1_I2D_vars(a); | ||
67 | |||
68 | M_ASN1_I2D_len (a->version, i2d_ASN1_INTEGER); | ||
69 | M_ASN1_I2D_len (a->authsafes, i2d_PKCS7); | ||
70 | M_ASN1_I2D_len (a->mac, i2d_PKCS12_MAC_DATA); | ||
71 | |||
72 | M_ASN1_I2D_seq_total(); | ||
73 | |||
74 | M_ASN1_I2D_put (a->version, i2d_ASN1_INTEGER); | ||
75 | M_ASN1_I2D_put (a->authsafes, i2d_PKCS7); | ||
76 | M_ASN1_I2D_put (a->mac, i2d_PKCS12_MAC_DATA); | ||
77 | |||
78 | M_ASN1_I2D_finish(); | ||
79 | } | ||
80 | |||
81 | PKCS12 *d2i_PKCS12(PKCS12 **a, unsigned char **pp, long length) | ||
82 | { | ||
83 | M_ASN1_D2I_vars(a,PKCS12 *,PKCS12_new); | ||
84 | M_ASN1_D2I_Init(); | ||
85 | M_ASN1_D2I_start_sequence(); | ||
86 | M_ASN1_D2I_get (ret->version, d2i_ASN1_INTEGER); | ||
87 | M_ASN1_D2I_get (ret->authsafes, d2i_PKCS7); | ||
88 | M_ASN1_D2I_get_opt (ret->mac, d2i_PKCS12_MAC_DATA, V_ASN1_SEQUENCE); | ||
89 | M_ASN1_D2I_Finish(a, PKCS12_free, ASN1_F_D2I_PKCS12); | ||
90 | } | ||
91 | |||
92 | PKCS12 *PKCS12_new(void) | ||
93 | { | ||
94 | PKCS12 *ret=NULL; | ||
95 | ASN1_CTX c; | ||
96 | M_ASN1_New_Malloc(ret, PKCS12); | ||
97 | ret->version=NULL; | ||
98 | ret->mac=NULL; | ||
99 | ret->authsafes=NULL; | ||
100 | return (ret); | ||
101 | M_ASN1_New_Error(ASN1_F_PKCS12_NEW); | ||
102 | } | ||
103 | |||
104 | void PKCS12_free (PKCS12 *a) | ||
105 | { | ||
106 | if (a == NULL) return; | ||
107 | ASN1_INTEGER_free (a->version); | ||
108 | PKCS12_MAC_DATA_free (a->mac); | ||
109 | PKCS7_free (a->authsafes); | ||
110 | Free ((char *)a); | ||
111 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_mac.c b/src/lib/libcrypto/pkcs12/p12_mac.c new file mode 100644 index 0000000000..f163d4cfaa --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_mac.c | |||
@@ -0,0 +1,110 @@ | |||
1 | /* p12_mac.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/asn1_mac.h> | ||
62 | #include <openssl/pkcs12.h> | ||
63 | |||
64 | int i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **pp) | ||
65 | { | ||
66 | M_ASN1_I2D_vars(a); | ||
67 | M_ASN1_I2D_len (a->dinfo, i2d_X509_SIG); | ||
68 | M_ASN1_I2D_len (a->salt, i2d_ASN1_OCTET_STRING); | ||
69 | M_ASN1_I2D_len (a->iter, i2d_ASN1_INTEGER); | ||
70 | |||
71 | M_ASN1_I2D_seq_total(); | ||
72 | |||
73 | M_ASN1_I2D_put (a->dinfo, i2d_X509_SIG); | ||
74 | M_ASN1_I2D_put (a->salt, i2d_ASN1_OCTET_STRING); | ||
75 | M_ASN1_I2D_put (a->iter, i2d_ASN1_INTEGER); | ||
76 | M_ASN1_I2D_finish(); | ||
77 | } | ||
78 | |||
79 | PKCS12_MAC_DATA *PKCS12_MAC_DATA_new(void) | ||
80 | { | ||
81 | PKCS12_MAC_DATA *ret=NULL; | ||
82 | ASN1_CTX c; | ||
83 | M_ASN1_New_Malloc(ret, PKCS12_MAC_DATA); | ||
84 | ret->dinfo = X509_SIG_new(); | ||
85 | ret->salt = ASN1_OCTET_STRING_new(); | ||
86 | ret->iter = NULL; | ||
87 | return (ret); | ||
88 | M_ASN1_New_Error(ASN1_F_PKCS12_MAC_DATA_NEW); | ||
89 | } | ||
90 | |||
91 | PKCS12_MAC_DATA *d2i_PKCS12_MAC_DATA(PKCS12_MAC_DATA **a, unsigned char **pp, | ||
92 | long length) | ||
93 | { | ||
94 | M_ASN1_D2I_vars(a,PKCS12_MAC_DATA *,PKCS12_MAC_DATA_new); | ||
95 | M_ASN1_D2I_Init(); | ||
96 | M_ASN1_D2I_start_sequence(); | ||
97 | M_ASN1_D2I_get (ret->dinfo, d2i_X509_SIG); | ||
98 | M_ASN1_D2I_get (ret->salt, d2i_ASN1_OCTET_STRING); | ||
99 | M_ASN1_D2I_get_opt (ret->iter, d2i_ASN1_INTEGER, V_ASN1_INTEGER); | ||
100 | M_ASN1_D2I_Finish(a, PKCS12_MAC_DATA_free, ASN1_F_D2I_PKCS12_MAC_DATA); | ||
101 | } | ||
102 | |||
103 | void PKCS12_MAC_DATA_free (PKCS12_MAC_DATA *a) | ||
104 | { | ||
105 | if (a == NULL) return; | ||
106 | X509_SIG_free (a->dinfo); | ||
107 | ASN1_OCTET_STRING_free (a->salt); | ||
108 | ASN1_INTEGER_free (a->iter); | ||
109 | Free ((char *)a); | ||
110 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_mutl.c b/src/lib/libcrypto/pkcs12/p12_mutl.c new file mode 100644 index 0000000000..bac558d6b9 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_mutl.c | |||
@@ -0,0 +1,170 @@ | |||
1 | /* p12_mutl.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #ifndef NO_HMAC | ||
60 | #include <stdio.h> | ||
61 | #include "cryptlib.h" | ||
62 | #include <openssl/hmac.h> | ||
63 | #include <openssl/rand.h> | ||
64 | #include <openssl/pkcs12.h> | ||
65 | |||
66 | /* Generate a MAC */ | ||
67 | int PKCS12_gen_mac (PKCS12 *p12, const char *pass, int passlen, | ||
68 | unsigned char *mac, unsigned int *maclen) | ||
69 | { | ||
70 | const EVP_MD *md_type; | ||
71 | HMAC_CTX hmac; | ||
72 | unsigned char key[PKCS12_MAC_KEY_LENGTH], *salt; | ||
73 | int saltlen, iter; | ||
74 | salt = p12->mac->salt->data; | ||
75 | saltlen = p12->mac->salt->length; | ||
76 | if (!p12->mac->iter) iter = 1; | ||
77 | else iter = ASN1_INTEGER_get (p12->mac->iter); | ||
78 | if(!(md_type = | ||
79 | EVP_get_digestbyobj (p12->mac->dinfo->algor->algorithm))) { | ||
80 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); | ||
81 | return 0; | ||
82 | } | ||
83 | if(!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, | ||
84 | PKCS12_MAC_KEY_LENGTH, key, md_type)) { | ||
85 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_KEY_GEN_ERROR); | ||
86 | return 0; | ||
87 | } | ||
88 | HMAC_Init (&hmac, key, PKCS12_MAC_KEY_LENGTH, md_type); | ||
89 | HMAC_Update (&hmac, p12->authsafes->d.data->data, | ||
90 | p12->authsafes->d.data->length); | ||
91 | HMAC_Final (&hmac, mac, maclen); | ||
92 | return 1; | ||
93 | } | ||
94 | |||
95 | /* Verify the mac */ | ||
96 | int PKCS12_verify_mac (PKCS12 *p12, const char *pass, int passlen) | ||
97 | { | ||
98 | unsigned char mac[EVP_MAX_MD_SIZE]; | ||
99 | unsigned int maclen; | ||
100 | if(p12->mac == NULL) { | ||
101 | PKCS12err(PKCS12_F_VERIFY_MAC,PKCS12_R_MAC_ABSENT); | ||
102 | return 0; | ||
103 | } | ||
104 | if (!PKCS12_gen_mac (p12, pass, passlen, mac, &maclen)) { | ||
105 | PKCS12err(PKCS12_F_VERIFY_MAC,PKCS12_R_MAC_GENERATION_ERROR); | ||
106 | return 0; | ||
107 | } | ||
108 | if ((maclen != (unsigned int)p12->mac->dinfo->digest->length) | ||
109 | || memcmp (mac, p12->mac->dinfo->digest->data, maclen)) { | ||
110 | PKCS12err(PKCS12_F_VERIFY_MAC,PKCS12_R_MAC_VERIFY_ERROR); | ||
111 | return 0; | ||
112 | } | ||
113 | return 1; | ||
114 | } | ||
115 | |||
116 | /* Set a mac */ | ||
117 | |||
118 | int PKCS12_set_mac (PKCS12 *p12, const char *pass, int passlen, | ||
119 | unsigned char *salt, int saltlen, int iter, EVP_MD *md_type) | ||
120 | { | ||
121 | unsigned char mac[EVP_MAX_MD_SIZE]; | ||
122 | unsigned int maclen; | ||
123 | |||
124 | if (!md_type) md_type = EVP_sha1(); | ||
125 | if (PKCS12_setup_mac (p12, iter, salt, saltlen, md_type) == | ||
126 | PKCS12_ERROR) { | ||
127 | PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_SETUP_ERROR); | ||
128 | return 0; | ||
129 | } | ||
130 | if (!PKCS12_gen_mac (p12, pass, passlen, mac, &maclen)) { | ||
131 | PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_GENERATION_ERROR); | ||
132 | return 0; | ||
133 | } | ||
134 | if (!(ASN1_OCTET_STRING_set (p12->mac->dinfo->digest, mac, maclen))) { | ||
135 | PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_STRING_SET_ERROR); | ||
136 | return 0; | ||
137 | } | ||
138 | return 1; | ||
139 | } | ||
140 | |||
141 | /* Set up a mac structure */ | ||
142 | int PKCS12_setup_mac (PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | ||
143 | EVP_MD *md_type) | ||
144 | { | ||
145 | if (!(p12->mac = PKCS12_MAC_DATA_new ())) return PKCS12_ERROR; | ||
146 | if (iter > 1) { | ||
147 | if(!(p12->mac->iter = ASN1_INTEGER_new())) { | ||
148 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | ||
149 | return 0; | ||
150 | } | ||
151 | ASN1_INTEGER_set (p12->mac->iter, iter); | ||
152 | } | ||
153 | if (!saltlen) saltlen = PKCS12_SALT_LEN; | ||
154 | p12->mac->salt->length = saltlen; | ||
155 | if (!(p12->mac->salt->data = Malloc (saltlen))) { | ||
156 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | ||
157 | return 0; | ||
158 | } | ||
159 | if (!salt) RAND_bytes (p12->mac->salt->data, saltlen); | ||
160 | else memcpy (p12->mac->salt->data, salt, saltlen); | ||
161 | p12->mac->dinfo->algor->algorithm = OBJ_nid2obj(EVP_MD_type(md_type)); | ||
162 | if (!(p12->mac->dinfo->algor->parameter = ASN1_TYPE_new())) { | ||
163 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | ||
164 | return 0; | ||
165 | } | ||
166 | p12->mac->dinfo->algor->parameter->type = V_ASN1_NULL; | ||
167 | |||
168 | return 1; | ||
169 | } | ||
170 | #endif | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_sbag.c b/src/lib/libcrypto/pkcs12/p12_sbag.c new file mode 100644 index 0000000000..1b3addece1 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_sbag.c | |||
@@ -0,0 +1,227 @@ | |||
1 | /* p12_sbag.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/asn1_mac.h> | ||
62 | #include <openssl/pkcs12.h> | ||
63 | |||
64 | int i2d_PKCS12_SAFEBAG(PKCS12_SAFEBAG *a, unsigned char **pp) | ||
65 | { | ||
66 | int bagnid, v = 0; | ||
67 | M_ASN1_I2D_vars(a); | ||
68 | bagnid = OBJ_obj2nid (a->type); | ||
69 | M_ASN1_I2D_len (a->type, i2d_ASN1_OBJECT); | ||
70 | |||
71 | switch (bagnid) { | ||
72 | |||
73 | case NID_keyBag: | ||
74 | M_ASN1_I2D_len_EXP_opt (a->value.keybag, | ||
75 | i2d_PKCS8_PRIV_KEY_INFO, 0, v); | ||
76 | break; | ||
77 | |||
78 | case NID_pkcs8ShroudedKeyBag: | ||
79 | M_ASN1_I2D_len_EXP_opt (a->value.shkeybag, | ||
80 | i2d_X509_SIG, 0, v); | ||
81 | break; | ||
82 | |||
83 | case NID_safeContentsBag: | ||
84 | M_ASN1_I2D_len_EXP_SEQUENCE_opt (a->value.safes, | ||
85 | i2d_PKCS12_SAFEBAG, 0, V_ASN1_SEQUENCE, v); | ||
86 | break; | ||
87 | |||
88 | case NID_certBag: | ||
89 | case NID_crlBag: | ||
90 | case NID_secretBag: | ||
91 | M_ASN1_I2D_len_EXP_opt (a->value.bag, | ||
92 | i2d_PKCS12_BAGS, 0, v); | ||
93 | break; | ||
94 | |||
95 | default: | ||
96 | M_ASN1_I2D_len_EXP_opt (a->value.other, | ||
97 | i2d_ASN1_TYPE, 0, v); | ||
98 | break; | ||
99 | } | ||
100 | |||
101 | M_ASN1_I2D_len_SET_type (X509_ATTRIBUTE,a->attrib, i2d_X509_ATTRIBUTE); | ||
102 | |||
103 | M_ASN1_I2D_seq_total (); | ||
104 | |||
105 | M_ASN1_I2D_put (a->type, i2d_ASN1_OBJECT); | ||
106 | |||
107 | switch (bagnid) { | ||
108 | |||
109 | case NID_keyBag: | ||
110 | M_ASN1_I2D_put_EXP_opt (a->value.keybag, | ||
111 | i2d_PKCS8_PRIV_KEY_INFO, 0, v); | ||
112 | break; | ||
113 | |||
114 | case NID_pkcs8ShroudedKeyBag: | ||
115 | M_ASN1_I2D_put_EXP_opt (a->value.shkeybag, | ||
116 | i2d_X509_SIG, 0, v); | ||
117 | break; | ||
118 | |||
119 | case NID_safeContentsBag: | ||
120 | M_ASN1_I2D_put_EXP_SEQUENCE_opt (a->value.safes, | ||
121 | i2d_PKCS12_SAFEBAG, 0, V_ASN1_SEQUENCE, v); | ||
122 | break; | ||
123 | |||
124 | case NID_certBag: | ||
125 | case NID_crlBag: | ||
126 | case NID_secretBag: | ||
127 | M_ASN1_I2D_put_EXP_opt (a->value.bag, | ||
128 | i2d_PKCS12_BAGS, 0, v); | ||
129 | break; | ||
130 | |||
131 | default: | ||
132 | M_ASN1_I2D_put_EXP_opt (a->value.other, | ||
133 | i2d_ASN1_TYPE, 0, v); | ||
134 | break; | ||
135 | } | ||
136 | |||
137 | M_ASN1_I2D_put_SET_type (X509_ATTRIBUTE, a->attrib, i2d_X509_ATTRIBUTE); | ||
138 | |||
139 | M_ASN1_I2D_finish(); | ||
140 | } | ||
141 | |||
142 | PKCS12_SAFEBAG *PKCS12_SAFEBAG_new(void) | ||
143 | { | ||
144 | PKCS12_SAFEBAG *ret=NULL; | ||
145 | ASN1_CTX c; | ||
146 | M_ASN1_New_Malloc(ret, PKCS12_SAFEBAG); | ||
147 | ret->type=NULL; | ||
148 | ret->value.other=NULL; | ||
149 | M_ASN1_New(ret->attrib, sk_X509_ATTRIBUTE_new_null); | ||
150 | ret->rest=NULL; | ||
151 | return (ret); | ||
152 | M_ASN1_New_Error(ASN1_F_PKCS12_SAFEBAG_NEW); | ||
153 | } | ||
154 | |||
155 | PKCS12_SAFEBAG *d2i_PKCS12_SAFEBAG(PKCS12_SAFEBAG **a, unsigned char **pp, | ||
156 | long length) | ||
157 | { | ||
158 | int bagnid; | ||
159 | M_ASN1_D2I_vars(a,PKCS12_SAFEBAG *,PKCS12_SAFEBAG_new); | ||
160 | M_ASN1_D2I_Init(); | ||
161 | M_ASN1_D2I_start_sequence(); | ||
162 | M_ASN1_D2I_get (ret->type, d2i_ASN1_OBJECT); | ||
163 | bagnid = OBJ_obj2nid (ret->type); | ||
164 | |||
165 | switch (bagnid) { | ||
166 | |||
167 | case NID_keyBag: | ||
168 | M_ASN1_D2I_get_EXP_opt (ret->value.keybag, | ||
169 | d2i_PKCS8_PRIV_KEY_INFO, 0); | ||
170 | break; | ||
171 | |||
172 | case NID_pkcs8ShroudedKeyBag: | ||
173 | M_ASN1_D2I_get_EXP_opt (ret->value.shkeybag, | ||
174 | d2i_X509_SIG, 0); | ||
175 | break; | ||
176 | |||
177 | case NID_safeContentsBag: | ||
178 | M_ASN1_D2I_get_EXP_set_opt(ret->value.safes, | ||
179 | d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free, | ||
180 | 0, V_ASN1_SEQUENCE); | ||
181 | break; | ||
182 | |||
183 | case NID_certBag: | ||
184 | case NID_crlBag: | ||
185 | case NID_secretBag: | ||
186 | M_ASN1_D2I_get_EXP_opt (ret->value.bag, | ||
187 | d2i_PKCS12_BAGS, 0); | ||
188 | break; | ||
189 | |||
190 | default: | ||
191 | M_ASN1_D2I_get_EXP_opt (ret->value.other, | ||
192 | d2i_ASN1_TYPE, 0); | ||
193 | break; | ||
194 | } | ||
195 | M_ASN1_D2I_get_set_opt_type(X509_ATTRIBUTE,ret->attrib, | ||
196 | d2i_X509_ATTRIBUTE,X509_ATTRIBUTE_free); | ||
197 | M_ASN1_D2I_Finish(a, PKCS12_SAFEBAG_free, ASN1_F_D2I_PKCS12_SAFEBAG); | ||
198 | } | ||
199 | |||
200 | void PKCS12_SAFEBAG_free (PKCS12_SAFEBAG *a) | ||
201 | { | ||
202 | if (a == NULL) return; | ||
203 | switch (OBJ_obj2nid(a->type)) { | ||
204 | |||
205 | case NID_keyBag: | ||
206 | PKCS8_PRIV_KEY_INFO_free (a->value.keybag); | ||
207 | break; | ||
208 | |||
209 | case NID_pkcs8ShroudedKeyBag: | ||
210 | X509_SIG_free (a->value.shkeybag); | ||
211 | break; | ||
212 | |||
213 | case NID_certBag: | ||
214 | case NID_crlBag: | ||
215 | case NID_secretBag: | ||
216 | PKCS12_BAGS_free (a->value.bag); | ||
217 | break; | ||
218 | |||
219 | default: | ||
220 | ASN1_TYPE_free (a->value.other); | ||
221 | break; | ||
222 | } | ||
223 | |||
224 | ASN1_OBJECT_free (a->type); | ||
225 | sk_X509_ATTRIBUTE_pop_free (a->attrib, X509_ATTRIBUTE_free); | ||
226 | Free (a); | ||
227 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_utl.c b/src/lib/libcrypto/pkcs12/p12_utl.c new file mode 100644 index 0000000000..2adcbc95e1 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/p12_utl.c | |||
@@ -0,0 +1,118 @@ | |||
1 | /* p12_utl.c */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <stdio.h> | ||
60 | #include "cryptlib.h" | ||
61 | #include <openssl/pkcs12.h> | ||
62 | |||
63 | /* Cheap and nasty Unicode stuff */ | ||
64 | |||
65 | unsigned char *asc2uni (const char *asc, unsigned char **uni, int *unilen) | ||
66 | { | ||
67 | int ulen, i; | ||
68 | unsigned char *unitmp; | ||
69 | ulen = strlen(asc)*2 + 2; | ||
70 | if (!(unitmp = Malloc (ulen))) return NULL; | ||
71 | for (i = 0; i < ulen; i+=2) { | ||
72 | unitmp[i] = 0; | ||
73 | unitmp[i + 1] = asc[i>>1]; | ||
74 | } | ||
75 | if (unilen) *unilen = ulen; | ||
76 | if (uni) *uni = unitmp; | ||
77 | return unitmp; | ||
78 | } | ||
79 | |||
80 | char *uni2asc (unsigned char *uni, int unilen) | ||
81 | { | ||
82 | int asclen, i; | ||
83 | char *asctmp; | ||
84 | asclen = unilen / 2; | ||
85 | /* If no terminating zero allow for one */ | ||
86 | if (uni[unilen - 1]) asclen++; | ||
87 | uni++; | ||
88 | if (!(asctmp = Malloc (asclen))) return NULL; | ||
89 | for (i = 0; i < unilen; i+=2) asctmp[i>>1] = uni[i]; | ||
90 | asctmp[asclen - 1] = 0; | ||
91 | return asctmp; | ||
92 | } | ||
93 | |||
94 | int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12) | ||
95 | { | ||
96 | return ASN1_i2d_bio((int(*)())i2d_PKCS12, bp, (unsigned char *)p12); | ||
97 | } | ||
98 | |||
99 | #ifndef NO_FP_API | ||
100 | int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12) | ||
101 | { | ||
102 | return ASN1_i2d_fp((int(*)())i2d_PKCS12, fp, (unsigned char *)p12); | ||
103 | } | ||
104 | #endif | ||
105 | |||
106 | PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12) | ||
107 | { | ||
108 | return (PKCS12 *)ASN1_d2i_bio((char *(*)())PKCS12_new, | ||
109 | (char *(*)())d2i_PKCS12, bp, (unsigned char **)p12); | ||
110 | } | ||
111 | #ifndef NO_FP_API | ||
112 | PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12) | ||
113 | { | ||
114 | return (PKCS12 *)ASN1_d2i_fp((char *(*)())PKCS12_new, | ||
115 | (char *(*)())d2i_PKCS12, fp, (unsigned char **)(p12)); | ||
116 | } | ||
117 | #endif | ||
118 | |||
diff --git a/src/lib/libcrypto/pkcs12/pk12err.c b/src/lib/libcrypto/pkcs12/pk12err.c new file mode 100644 index 0000000000..38d7be7675 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/pk12err.c | |||
@@ -0,0 +1,136 @@ | |||
1 | /* crypto/pkcs12/pk12err.c */ | ||
2 | /* ==================================================================== | ||
3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions | ||
7 | * are met: | ||
8 | * | ||
9 | * 1. Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * | ||
12 | * 2. Redistributions in binary form must reproduce the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer in | ||
14 | * the documentation and/or other materials provided with the | ||
15 | * distribution. | ||
16 | * | ||
17 | * 3. All advertising materials mentioning features or use of this | ||
18 | * software must display the following acknowledgment: | ||
19 | * "This product includes software developed by the OpenSSL Project | ||
20 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
21 | * | ||
22 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
23 | * endorse or promote products derived from this software without | ||
24 | * prior written permission. For written permission, please contact | ||
25 | * openssl-core@OpenSSL.org. | ||
26 | * | ||
27 | * 5. Products derived from this software may not be called "OpenSSL" | ||
28 | * nor may "OpenSSL" appear in their names without prior written | ||
29 | * permission of the OpenSSL Project. | ||
30 | * | ||
31 | * 6. Redistributions of any form whatsoever must retain the following | ||
32 | * acknowledgment: | ||
33 | * "This product includes software developed by the OpenSSL Project | ||
34 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
35 | * | ||
36 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
37 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
38 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
39 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
40 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
41 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
42 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
43 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
44 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
45 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
46 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
47 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
48 | * ==================================================================== | ||
49 | * | ||
50 | * This product includes cryptographic software written by Eric Young | ||
51 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
52 | * Hudson (tjh@cryptsoft.com). | ||
53 | * | ||
54 | */ | ||
55 | |||
56 | /* NOTE: this file was auto generated by the mkerr.pl script: any changes | ||
57 | * made to it will be overwritten when the script next updates this file. | ||
58 | */ | ||
59 | |||
60 | #include <stdio.h> | ||
61 | #include <openssl/err.h> | ||
62 | #include <openssl/pkcs12.h> | ||
63 | |||
64 | /* BEGIN ERROR CODES */ | ||
65 | #ifndef NO_ERR | ||
66 | static ERR_STRING_DATA PKCS12_str_functs[]= | ||
67 | { | ||
68 | {ERR_PACK(0,PKCS12_F_PARSE_BAGS,0), "PARSE_BAGS"}, | ||
69 | {ERR_PACK(0,PKCS12_F_PKCS12_ADD_FRIENDLYNAME,0), "PKCS12_ADD_FRIENDLYNAME"}, | ||
70 | {ERR_PACK(0,PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC,0), "PKCS12_add_friendlyname_asc"}, | ||
71 | {ERR_PACK(0,PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,0), "PKCS12_add_friendlyname_uni"}, | ||
72 | {ERR_PACK(0,PKCS12_F_PKCS12_ADD_LOCALKEYID,0), "PKCS12_add_localkeyid"}, | ||
73 | {ERR_PACK(0,PKCS12_F_PKCS12_CREATE,0), "PKCS12_create"}, | ||
74 | {ERR_PACK(0,PKCS12_F_PKCS12_DECRYPT_D2I,0), "PKCS12_decrypt_d2i"}, | ||
75 | {ERR_PACK(0,PKCS12_F_PKCS12_GEN_MAC,0), "PKCS12_gen_mac"}, | ||
76 | {ERR_PACK(0,PKCS12_F_PKCS12_I2D_ENCRYPT,0), "PKCS12_i2d_encrypt"}, | ||
77 | {ERR_PACK(0,PKCS12_F_PKCS12_INIT,0), "PKCS12_init"}, | ||
78 | {ERR_PACK(0,PKCS12_F_PKCS12_KEY_GEN_ASC,0), "PKCS12_key_gen_asc"}, | ||
79 | {ERR_PACK(0,PKCS12_F_PKCS12_KEY_GEN_UNI,0), "PKCS12_key_gen_uni"}, | ||
80 | {ERR_PACK(0,PKCS12_F_PKCS12_MAKE_KEYBAG,0), "PKCS12_MAKE_KEYBAG"}, | ||
81 | {ERR_PACK(0,PKCS12_F_PKCS12_MAKE_SHKEYBAG,0), "PKCS12_MAKE_SHKEYBAG"}, | ||
82 | {ERR_PACK(0,PKCS12_F_PKCS12_PACK_P7DATA,0), "PKCS12_pack_p7data"}, | ||
83 | {ERR_PACK(0,PKCS12_F_PKCS12_PACK_P7ENCDATA,0), "PKCS12_pack_p7encdata"}, | ||
84 | {ERR_PACK(0,PKCS12_F_PKCS12_PACK_SAFEBAG,0), "PKCS12_pack_safebag"}, | ||
85 | {ERR_PACK(0,PKCS12_F_PKCS12_PARSE,0), "PKCS12_parse"}, | ||
86 | {ERR_PACK(0,PKCS12_F_PKCS12_PBE_CRYPT,0), "PKCS12_pbe_crypt"}, | ||
87 | {ERR_PACK(0,PKCS12_F_PKCS12_PBE_KEYIVGEN,0), "PKCS12_PBE_keyivgen"}, | ||
88 | {ERR_PACK(0,PKCS12_F_PKCS12_SETUP_MAC,0), "PKCS12_setup_mac"}, | ||
89 | {ERR_PACK(0,PKCS12_F_PKCS12_SET_MAC,0), "PKCS12_set_mac"}, | ||
90 | {ERR_PACK(0,PKCS12_F_PKCS8_ADD_KEYUSAGE,0), "PKCS8_add_keyusage"}, | ||
91 | {ERR_PACK(0,PKCS12_F_PKCS8_ENCRYPT,0), "PKCS8_encrypt"}, | ||
92 | {ERR_PACK(0,PKCS12_F_VERIFY_MAC,0), "VERIFY_MAC"}, | ||
93 | {0,NULL} | ||
94 | }; | ||
95 | |||
96 | static ERR_STRING_DATA PKCS12_str_reasons[]= | ||
97 | { | ||
98 | {PKCS12_R_CANT_PACK_STRUCTURE ,"cant pack structure"}, | ||
99 | {PKCS12_R_DECODE_ERROR ,"decode error"}, | ||
100 | {PKCS12_R_ENCODE_ERROR ,"encode error"}, | ||
101 | {PKCS12_R_ENCRYPT_ERROR ,"encrypt error"}, | ||
102 | {PKCS12_R_INVALID_NULL_ARGUMENT ,"invalid null argument"}, | ||
103 | {PKCS12_R_INVALID_NULL_PKCS12_POINTER ,"invalid null pkcs12 pointer"}, | ||
104 | {PKCS12_R_IV_GEN_ERROR ,"iv gen error"}, | ||
105 | {PKCS12_R_KEY_GEN_ERROR ,"key gen error"}, | ||
106 | {PKCS12_R_MAC_ABSENT ,"mac absent"}, | ||
107 | {PKCS12_R_MAC_GENERATION_ERROR ,"mac generation error"}, | ||
108 | {PKCS12_R_MAC_SETUP_ERROR ,"mac setup error"}, | ||
109 | {PKCS12_R_MAC_STRING_SET_ERROR ,"mac string set error"}, | ||
110 | {PKCS12_R_MAC_VERIFY_ERROR ,"mac verify error"}, | ||
111 | {PKCS12_R_MAC_VERIFY_FAILURE ,"mac verify failure"}, | ||
112 | {PKCS12_R_PARSE_ERROR ,"parse error"}, | ||
113 | {PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR ,"pkcs12 algor cipherinit error"}, | ||
114 | {PKCS12_R_PKCS12_CIPHERFINAL_ERROR ,"pkcs12 cipherfinal error"}, | ||
115 | {PKCS12_R_PKCS12_PBE_CRYPT_ERROR ,"pkcs12 pbe crypt error"}, | ||
116 | {PKCS12_R_UNKNOWN_DIGEST_ALGORITHM ,"unknown digest algorithm"}, | ||
117 | {PKCS12_R_UNSUPPORTED_PKCS12_MODE ,"unsupported pkcs12 mode"}, | ||
118 | {0,NULL} | ||
119 | }; | ||
120 | |||
121 | #endif | ||
122 | |||
123 | void ERR_load_PKCS12_strings(void) | ||
124 | { | ||
125 | static int init=1; | ||
126 | |||
127 | if (init) | ||
128 | { | ||
129 | init=0; | ||
130 | #ifndef NO_ERR | ||
131 | ERR_load_strings(ERR_LIB_PKCS12,PKCS12_str_functs); | ||
132 | ERR_load_strings(ERR_LIB_PKCS12,PKCS12_str_reasons); | ||
133 | #endif | ||
134 | |||
135 | } | ||
136 | } | ||
diff --git a/src/lib/libcrypto/pkcs12/pkcs12.h b/src/lib/libcrypto/pkcs12/pkcs12.h new file mode 100644 index 0000000000..4cfba5e6c6 --- /dev/null +++ b/src/lib/libcrypto/pkcs12/pkcs12.h | |||
@@ -0,0 +1,337 @@ | |||
1 | /* pkcs12.h */ | ||
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | ||
3 | * project 1999. | ||
4 | */ | ||
5 | /* ==================================================================== | ||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * 1. Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * | ||
15 | * 2. Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in | ||
17 | * the documentation and/or other materials provided with the | ||
18 | * distribution. | ||
19 | * | ||
20 | * 3. All advertising materials mentioning features or use of this | ||
21 | * software must display the following acknowledgment: | ||
22 | * "This product includes software developed by the OpenSSL Project | ||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | ||
24 | * | ||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
26 | * endorse or promote products derived from this software without | ||
27 | * prior written permission. For written permission, please contact | ||
28 | * licensing@OpenSSL.org. | ||
29 | * | ||
30 | * 5. Products derived from this software may not be called "OpenSSL" | ||
31 | * nor may "OpenSSL" appear in their names without prior written | ||
32 | * permission of the OpenSSL Project. | ||
33 | * | ||
34 | * 6. Redistributions of any form whatsoever must retain the following | ||
35 | * acknowledgment: | ||
36 | * "This product includes software developed by the OpenSSL Project | ||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * ==================================================================== | ||
52 | * | ||
53 | * This product includes cryptographic software written by Eric Young | ||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
55 | * Hudson (tjh@cryptsoft.com). | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #ifndef HEADER_PKCS12_H | ||
60 | #define HEADER_PKCS12_H | ||
61 | |||
62 | #ifdef __cplusplus | ||
63 | extern "C" { | ||
64 | #endif | ||
65 | |||
66 | #include <openssl/bio.h> | ||
67 | #include <openssl/x509.h> | ||
68 | |||
69 | #define PKCS12_KEY_ID 1 | ||
70 | #define PKCS12_IV_ID 2 | ||
71 | #define PKCS12_MAC_ID 3 | ||
72 | |||
73 | /* Default iteration count */ | ||
74 | #ifndef PKCS12_DEFAULT_ITER | ||
75 | #define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER | ||
76 | #endif | ||
77 | |||
78 | #define PKCS12_MAC_KEY_LENGTH 20 | ||
79 | |||
80 | #define PKCS12_SALT_LEN 8 | ||
81 | |||
82 | /* Uncomment out next line for unicode password and names, otherwise ASCII */ | ||
83 | |||
84 | /*#define PBE_UNICODE*/ | ||
85 | |||
86 | #ifdef PBE_UNICODE | ||
87 | #define PKCS12_key_gen PKCS12_key_gen_uni | ||
88 | #define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni | ||
89 | #else | ||
90 | #define PKCS12_key_gen PKCS12_key_gen_asc | ||
91 | #define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc | ||
92 | #endif | ||
93 | |||
94 | /* MS key usage constants */ | ||
95 | |||
96 | #define KEY_EX 0x10 | ||
97 | #define KEY_SIG 0x80 | ||
98 | |||
99 | typedef struct { | ||
100 | X509_SIG *dinfo; | ||
101 | ASN1_OCTET_STRING *salt; | ||
102 | ASN1_INTEGER *iter; /* defaults to 1 */ | ||
103 | } PKCS12_MAC_DATA; | ||
104 | |||
105 | typedef struct { | ||
106 | ASN1_INTEGER *version; | ||
107 | PKCS12_MAC_DATA *mac; | ||
108 | PKCS7 *authsafes; | ||
109 | } PKCS12; | ||
110 | |||
111 | typedef struct { | ||
112 | ASN1_OBJECT *type; | ||
113 | union { | ||
114 | struct pkcs12_bag_st *bag; /* secret, crl and certbag */ | ||
115 | struct pkcs8_priv_key_info_st *keybag; /* keybag */ | ||
116 | X509_SIG *shkeybag; /* shrouded key bag */ | ||
117 | STACK /* PKCS12_SAFEBAG */ *safes; | ||
118 | ASN1_TYPE *other; | ||
119 | }value; | ||
120 | STACK_OF(X509_ATTRIBUTE) *attrib; | ||
121 | ASN1_TYPE *rest; | ||
122 | } PKCS12_SAFEBAG; | ||
123 | |||
124 | typedef struct pkcs12_bag_st { | ||
125 | ASN1_OBJECT *type; | ||
126 | union { | ||
127 | ASN1_OCTET_STRING *x509cert; | ||
128 | ASN1_OCTET_STRING *x509crl; | ||
129 | ASN1_OCTET_STRING *octet; | ||
130 | ASN1_IA5STRING *sdsicert; | ||
131 | ASN1_TYPE *other; /* Secret or other bag */ | ||
132 | }value; | ||
133 | } PKCS12_BAGS; | ||
134 | |||
135 | #define PKCS12_ERROR 0 | ||
136 | #define PKCS12_OK 1 | ||
137 | |||
138 | #define M_PKCS12_bag_type(bag) OBJ_obj2nid(bag->type) | ||
139 | #define M_PKCS12_cert_bag_type(bag) OBJ_obj2nid(bag->value.bag->type) | ||
140 | #define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type | ||
141 | |||
142 | #define M_PKCS12_x5092certbag(x509) \ | ||
143 | PKCS12_pack_safebag ((char *)(x509), i2d_X509, NID_x509Certificate, NID_certBag) | ||
144 | |||
145 | #define M_PKCS12_x509crl2certbag(crl) \ | ||
146 | PKCS12_pack_safebag ((char *)(crl), i2d_X509CRL, NID_x509Crl, NID_crlBag) | ||
147 | |||
148 | #define M_PKCS12_certbag2x509(bg) \ | ||
149 | (X509 *) ASN1_unpack_string ((bg)->value.bag->value.octet, \ | ||
150 | (char *(*)())d2i_X509) | ||
151 | |||
152 | #define M_PKCS12_certbag2x509crl(bg) \ | ||
153 | (X509CRL *) ASN1_unpack_string ((bg)->value.bag->value.octet, \ | ||
154 | (char *(*)())d2i_X509CRL) | ||
155 | |||
156 | /*#define M_PKCS12_pkcs82rsa(p8) \ | ||
157 | (RSA *) ASN1_unpack_string ((p8)->pkey, (char *(*)())d2i_RSAPrivateKey)*/ | ||
158 | |||
159 | #define M_PKCS12_unpack_p7data(p7) \ | ||
160 | ASN1_seq_unpack ((p7)->d.data->data, p7->d.data->length, \ | ||
161 | (char *(*)())d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free) | ||
162 | |||
163 | #define M_PKCS12_pack_authsafes(p12, safes) \ | ||
164 | ASN1_seq_pack((safes), (int (*)())i2d_PKCS7,\ | ||
165 | &(p12)->authsafes->d.data->data, &(p12)->authsafes->d.data->length) | ||
166 | |||
167 | #define M_PKCS12_unpack_authsafes(p12) \ | ||
168 | ASN1_seq_unpack((p12)->authsafes->d.data->data, \ | ||
169 | (p12)->authsafes->d.data->length, (char *(*)())d2i_PKCS7, \ | ||
170 | PKCS7_free) | ||
171 | |||
172 | #define M_PKCS12_unpack_p7encdata(p7, pass, passlen) \ | ||
173 | (STACK *) PKCS12_decrypt_d2i ((p7)->d.encrypted->enc_data->algorithm,\ | ||
174 | (char *(*)())d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free, \ | ||
175 | (pass), (passlen), \ | ||
176 | (p7)->d.encrypted->enc_data->enc_data, 3) | ||
177 | |||
178 | #define M_PKCS12_decrypt_skey(bag, pass, passlen) \ | ||
179 | (PKCS8_PRIV_KEY_INFO *) PKCS12_decrypt_d2i ((bag)->value.shkeybag->algor, \ | ||
180 | (char *(*)())d2i_PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free, \ | ||
181 | (pass), (passlen), \ | ||
182 | (bag)->value.shkeybag->digest, 2) | ||
183 | |||
184 | #define M_PKCS8_decrypt(p8, pass, passlen) \ | ||
185 | (PKCS8_PRIV_KEY_INFO *) PKCS12_decrypt_d2i ((p8)->algor, \ | ||
186 | (char *(*)())d2i_PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free,\ | ||
187 | (pass), (passlen), (p8)->digest, 2) | ||
188 | |||
189 | #define PKCS12_get_attr(bag, attr_nid) \ | ||
190 | PKCS12_get_attr_gen(bag->attrib, attr_nid) | ||
191 | |||
192 | #define PKCS8_get_attr(p8, attr_nid) \ | ||
193 | PKCS12_get_attr_gen(p8->attributes, attr_nid) | ||
194 | |||
195 | #define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0) | ||
196 | |||
197 | |||
198 | PKCS12_SAFEBAG *PKCS12_pack_safebag(char *obj, int (*i2d)(), int nid1, int nid2); | ||
199 | PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8); | ||
200 | X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, | ||
201 | const char *pass, int passlen, | ||
202 | unsigned char *salt, int saltlen, int iter, | ||
203 | PKCS8_PRIV_KEY_INFO *p8); | ||
204 | PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, | ||
205 | int passlen, unsigned char *salt, | ||
206 | int saltlen, int iter, | ||
207 | PKCS8_PRIV_KEY_INFO *p8); | ||
208 | PKCS7 *PKCS12_pack_p7data(STACK *sk); | ||
209 | PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, | ||
210 | unsigned char *salt, int saltlen, int iter, | ||
211 | STACK *bags); | ||
212 | int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen); | ||
213 | int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, | ||
214 | int namelen); | ||
215 | int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, | ||
216 | int namelen); | ||
217 | int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); | ||
218 | ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); | ||
219 | char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); | ||
220 | unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, | ||
221 | int passlen, unsigned char *in, int inlen, | ||
222 | unsigned char **data, int *datalen, int en_de); | ||
223 | char *PKCS12_decrypt_d2i(X509_ALGOR *algor, char *(*d2i)(), | ||
224 | void (*free_func)(), const char *pass, int passlen, | ||
225 | ASN1_STRING *oct, int seq); | ||
226 | ASN1_STRING *PKCS12_i2d_encrypt(X509_ALGOR *algor, int (*i2d)(), | ||
227 | const char *pass, int passlen, char *obj, | ||
228 | int seq); | ||
229 | PKCS12 *PKCS12_init(int mode); | ||
230 | int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, | ||
231 | int saltlen, int id, int iter, int n, | ||
232 | unsigned char *out, const EVP_MD *md_type); | ||
233 | int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); | ||
234 | int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | ||
235 | ASN1_TYPE *param, EVP_CIPHER *cipher, EVP_MD *md_type, | ||
236 | int en_de); | ||
237 | int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | ||
238 | unsigned char *mac, unsigned int *maclen); | ||
239 | int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); | ||
240 | int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, | ||
241 | unsigned char *salt, int saltlen, int iter, | ||
242 | EVP_MD *md_type); | ||
243 | int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, | ||
244 | int saltlen, EVP_MD *md_type); | ||
245 | unsigned char *asc2uni(const char *asc, unsigned char **uni, int *unilen); | ||
246 | char *uni2asc(unsigned char *uni, int unilen); | ||
247 | int i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **pp); | ||
248 | PKCS12_BAGS *PKCS12_BAGS_new(void); | ||
249 | PKCS12_BAGS *d2i_PKCS12_BAGS(PKCS12_BAGS **a, unsigned char **pp, long length); | ||
250 | void PKCS12_BAGS_free(PKCS12_BAGS *a); | ||
251 | int i2d_PKCS12(PKCS12 *a, unsigned char **pp); | ||
252 | PKCS12 *d2i_PKCS12(PKCS12 **a, unsigned char **pp, long length); | ||
253 | PKCS12 *PKCS12_new(void); | ||
254 | void PKCS12_free(PKCS12 *a); | ||
255 | int i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **pp); | ||
256 | PKCS12_MAC_DATA *PKCS12_MAC_DATA_new(void); | ||
257 | PKCS12_MAC_DATA *d2i_PKCS12_MAC_DATA(PKCS12_MAC_DATA **a, unsigned char **pp, | ||
258 | long length); | ||
259 | void PKCS12_MAC_DATA_free(PKCS12_MAC_DATA *a); | ||
260 | int i2d_PKCS12_SAFEBAG(PKCS12_SAFEBAG *a, unsigned char **pp); | ||
261 | PKCS12_SAFEBAG *PKCS12_SAFEBAG_new(void); | ||
262 | PKCS12_SAFEBAG *d2i_PKCS12_SAFEBAG(PKCS12_SAFEBAG **a, unsigned char **pp, | ||
263 | long length); | ||
264 | void PKCS12_SAFEBAG_free(PKCS12_SAFEBAG *a); | ||
265 | void ERR_load_PKCS12_strings(void); | ||
266 | void PKCS12_PBE_add(void); | ||
267 | int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, | ||
268 | STACK **ca); | ||
269 | PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, | ||
270 | STACK *ca, int nid_key, int nid_cert, int iter, | ||
271 | int mac_iter, int keytype); | ||
272 | int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); | ||
273 | int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); | ||
274 | PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); | ||
275 | PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); | ||
276 | |||
277 | /* BEGIN ERROR CODES */ | ||
278 | /* The following lines are auto generated by the script mkerr.pl. Any changes | ||
279 | * made after this point may be overwritten when the script is next run. | ||
280 | */ | ||
281 | |||
282 | /* Error codes for the PKCS12 functions. */ | ||
283 | |||
284 | /* Function codes. */ | ||
285 | #define PKCS12_F_PARSE_BAGS 103 | ||
286 | #define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 | ||
287 | #define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 | ||
288 | #define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 | ||
289 | #define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 | ||
290 | #define PKCS12_F_PKCS12_CREATE 105 | ||
291 | #define PKCS12_F_PKCS12_DECRYPT_D2I 106 | ||
292 | #define PKCS12_F_PKCS12_GEN_MAC 107 | ||
293 | #define PKCS12_F_PKCS12_I2D_ENCRYPT 108 | ||
294 | #define PKCS12_F_PKCS12_INIT 109 | ||
295 | #define PKCS12_F_PKCS12_KEY_GEN_ASC 110 | ||
296 | #define PKCS12_F_PKCS12_KEY_GEN_UNI 111 | ||
297 | #define PKCS12_F_PKCS12_MAKE_KEYBAG 112 | ||
298 | #define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 | ||
299 | #define PKCS12_F_PKCS12_PACK_P7DATA 114 | ||
300 | #define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 | ||
301 | #define PKCS12_F_PKCS12_PACK_SAFEBAG 117 | ||
302 | #define PKCS12_F_PKCS12_PARSE 118 | ||
303 | #define PKCS12_F_PKCS12_PBE_CRYPT 119 | ||
304 | #define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 | ||
305 | #define PKCS12_F_PKCS12_SETUP_MAC 122 | ||
306 | #define PKCS12_F_PKCS12_SET_MAC 123 | ||
307 | #define PKCS12_F_PKCS8_ADD_KEYUSAGE 124 | ||
308 | #define PKCS12_F_PKCS8_ENCRYPT 125 | ||
309 | #define PKCS12_F_VERIFY_MAC 126 | ||
310 | |||
311 | /* Reason codes. */ | ||
312 | #define PKCS12_R_CANT_PACK_STRUCTURE 100 | ||
313 | #define PKCS12_R_DECODE_ERROR 101 | ||
314 | #define PKCS12_R_ENCODE_ERROR 102 | ||
315 | #define PKCS12_R_ENCRYPT_ERROR 103 | ||
316 | #define PKCS12_R_INVALID_NULL_ARGUMENT 104 | ||
317 | #define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 | ||
318 | #define PKCS12_R_IV_GEN_ERROR 106 | ||
319 | #define PKCS12_R_KEY_GEN_ERROR 107 | ||
320 | #define PKCS12_R_MAC_ABSENT 108 | ||
321 | #define PKCS12_R_MAC_GENERATION_ERROR 109 | ||
322 | #define PKCS12_R_MAC_SETUP_ERROR 110 | ||
323 | #define PKCS12_R_MAC_STRING_SET_ERROR 111 | ||
324 | #define PKCS12_R_MAC_VERIFY_ERROR 112 | ||
325 | #define PKCS12_R_MAC_VERIFY_FAILURE 113 | ||
326 | #define PKCS12_R_PARSE_ERROR 114 | ||
327 | #define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 | ||
328 | #define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 | ||
329 | #define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 | ||
330 | #define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 | ||
331 | #define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 | ||
332 | |||
333 | #ifdef __cplusplus | ||
334 | } | ||
335 | #endif | ||
336 | #endif | ||
337 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/3des.pem b/src/lib/libcrypto/pkcs7/t/3des.pem new file mode 100644 index 0000000000..b2b5081a10 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/3des.pem | |||
@@ -0,0 +1,16 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | MIAGCSqGSIb3DQEHA6CAMIACAQAxggHmMIHwAgEAMIGZMIGSMQswCQYDVQQGEwJBVTETMBEG | ||
3 | A1UECBMKUXVlZW5zbGFuZDERMA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29m | ||
4 | dCBQdHkgTHRkMSIwIAYDVQQLExlERU1PTlNUUkFUSU9OIEFORCBURVNUSU5HMRswGQYDVQQD | ||
5 | ExJERU1PIFpFUk8gVkFMVUUgQ0ECAgR+MA0GCSqGSIb3DQEBAQUABEC2vXI1xQDW6lUHM3zQ | ||
6 | /9uBEBOO5A3TtkrklAXq7v01gsIC21t52qSk36REXY+slhNZ0OQ349tgkTsoETHFLoEwMIHw | ||
7 | AgEAMIGZMIGSMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDERMA8GA1UEBxMI | ||
8 | QnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29mdCBQdHkgTHRkMSIwIAYDVQQLExlERU1PTlNU | ||
9 | UkFUSU9OIEFORCBURVNUSU5HMRswGQYDVQQDExJERU1PIFpFUk8gVkFMVUUgQ0ECAgR9MA0G | ||
10 | CSqGSIb3DQEBAQUABEB8ujxbabxXUYJhopuDm3oDq4JNqX6Io4p3ro+ShqfIndsXTZ1v5a2N | ||
11 | WtLLCWlHn/habjBwZ/DgQgcKASbZ7QxNMIAGCSqGSIb3DQEHATAaBggqhkiG9w0DAjAOAgIA | ||
12 | oAQIbsL5v1wX98KggAQoAaJ4WHm68fXY1WE5OIjfVBIDpO1K+i8dmKhjnAjrjoyZ9Bwc8rDL | ||
13 | lgQg4CXb805h5xl+GfvSwUaHJayte1m2mcOhs3J2YyqbQ+MEIMIiJQccmhO3oDKm36CFvYR8 | ||
14 | 5PjpclVcZyX2ngbwPFMnBAgy0clOAE6UKAAAAAAAAAAAAAA= | ||
15 | -----END PKCS7----- | ||
16 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/3dess.pem b/src/lib/libcrypto/pkcs7/t/3dess.pem new file mode 100644 index 0000000000..23f013516a --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/3dess.pem | |||
@@ -0,0 +1,32 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | 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 | ||
31 | 9CWR6g== | ||
32 | -----END PKCS7----- | ||
diff --git a/src/lib/libcrypto/pkcs7/t/c.pem b/src/lib/libcrypto/pkcs7/t/c.pem new file mode 100644 index 0000000000..a4b55e321a --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/c.pem | |||
@@ -0,0 +1,48 @@ | |||
1 | issuer :/C=AU/SP=Queensland/L=Brisbane/O=Cryptsoft Pty Ltd/OU=DEMONSTRATION AND TESTING/CN=DEMO ZERO VALUE CA | ||
2 | subject:/C=AU/SP=Queensland/L=Brisbane/O=Cryptsoft Pty Ltd/OU=SMIME 003/CN=Information/Email=info@cryptsoft.com | ||
3 | serial :047D | ||
4 | |||
5 | Certificate: | ||
6 | Data: | ||
7 | Version: 3 (0x2) | ||
8 | Serial Number: 1149 (0x47d) | ||
9 | Signature Algorithm: md5withRSAEncryption | ||
10 | Issuer: C=AU, SP=Queensland, L=Brisbane, O=Cryptsoft Pty Ltd, OU=DEMONSTRATION AND TESTING, CN=DEMO ZERO VALUE CA | ||
11 | Validity | ||
12 | Not Before: May 13 05:40:58 1998 GMT | ||
13 | Not After : May 12 05:40:58 2000 GMT | ||
14 | Subject: C=AU, SP=Queensland, L=Brisbane, O=Cryptsoft Pty Ltd, OU=SMIME 003, CN=Information/Email=info@cryptsoft.com | ||
15 | Subject Public Key Info: | ||
16 | Public Key Algorithm: rsaEncryption | ||
17 | Modulus: | ||
18 | 00:ad:e7:23:89:ee:0d:87:b7:9c:32:44:4b:95:81: | ||
19 | 73:dd:22:80:4b:2d:c5:60:b8:fe:1e:18:63:ef:dc: | ||
20 | 89:89:22:df:95:3c:7a:db:3d:9a:06:a8:08:d6:29: | ||
21 | fd:ef:41:09:91:ed:bc:ad:98:f9:f6:28:90:62:6f: | ||
22 | e7:e7:0c:4d:0b | ||
23 | Exponent: 65537 (0x10001) | ||
24 | X509v3 extensions: | ||
25 | Netscape Comment: | ||
26 | Generated with SSLeay | ||
27 | Signature Algorithm: md5withRSAEncryption | ||
28 | 52:15:ea:88:f4:f0:f9:0b:ef:ce:d5:f8:83:40:61:16:5e:55: | ||
29 | f9:ce:2d:d1:8b:31:5c:03:c6:2d:10:7c:61:d5:5c:0a:42:97: | ||
30 | d1:fd:65:b6:b6:84:a5:39:ec:46:ec:fc:e0:0d:d9:22:da:1b: | ||
31 | 50:74:ad:92:cb:4e:90:e5:fa:7d | ||
32 | |||
33 | -----BEGIN CERTIFICATE----- | ||
34 | MIICTDCCAfagAwIBAgICBH0wDQYJKoZIhvcNAQEEBQAwgZIxCzAJBgNVBAYTAkFV | ||
35 | MRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UE | ||
36 | ChMRQ3J5cHRzb2Z0IFB0eSBMdGQxIjAgBgNVBAsTGURFTU9OU1RSQVRJT04gQU5E | ||
37 | IFRFU1RJTkcxGzAZBgNVBAMTEkRFTU8gWkVSTyBWQUxVRSBDQTAeFw05ODA1MTMw | ||
38 | NTQwNThaFw0wMDA1MTIwNTQwNThaMIGeMQswCQYDVQQGEwJBVTETMBEGA1UECBMK | ||
39 | UXVlZW5zbGFuZDERMA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29m | ||
40 | dCBQdHkgTHRkMRIwEAYDVQQLEwlTTUlNRSAwMDMxFDASBgNVBAMTC0luZm9ybWF0 | ||
41 | aW9uMSEwHwYJKoZIhvcNAQkBFhJpbmZvQGNyeXB0c29mdC5jb20wXDANBgkqhkiG | ||
42 | 9w0BAQEFAANLADBIAkEArecjie4Nh7ecMkRLlYFz3SKASy3FYLj+Hhhj79yJiSLf | ||
43 | lTx62z2aBqgI1in970EJke28rZj59iiQYm/n5wxNCwIDAQABoygwJjAkBglghkgB | ||
44 | hvhCAQ0EFxYVR2VuZXJhdGVkIHdpdGggU1NMZWF5MA0GCSqGSIb3DQEBBAUAA0EA | ||
45 | UhXqiPTw+QvvztX4g0BhFl5V+c4t0YsxXAPGLRB8YdVcCkKX0f1ltraEpTnsRuz8 | ||
46 | 4A3ZItobUHStkstOkOX6fQ== | ||
47 | -----END CERTIFICATE----- | ||
48 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/ff b/src/lib/libcrypto/pkcs7/t/ff new file mode 100644 index 0000000000..23f013516a --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/ff | |||
@@ -0,0 +1,32 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | 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 | ||
31 | 9CWR6g== | ||
32 | -----END PKCS7----- | ||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-e b/src/lib/libcrypto/pkcs7/t/msie-e new file mode 100644 index 0000000000..aafae69fc9 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-e | |||
@@ -0,0 +1,20 @@ | |||
1 | |||
2 | MIAGCSqGSIb3DQEHA6CAMIACAQAxggHCMIHMAgEAMHYwYjERMA8GA1UEBxMISW50ZXJuZXQxFzAV | ||
3 | BgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJpU2lnbiBDbGFzcyAxIENBIC0gSW5k | ||
4 | aXZpZHVhbCBTdWJzY3JpYmVyAhBgQJiC3qfbCbjdj5INYLnKMA0GCSqGSIb3DQEBAQUABECMzu8y | ||
5 | wQ/qZbO8cAGMRBF+mPruv3+Dvb9aWNZ2k8njUgqF6mcdhVB2MkGcsG3memRXJBixvMYWVkU3qK4Z | ||
6 | VuKsMIHwAgEAMIGZMIGSMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDERMA8GA1UE | ||
7 | BxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29mdCBQdHkgTHRkMSIwIAYDVQQLExlERU1PTlNU | ||
8 | UkFUSU9OIEFORCBURVNUSU5HMRswGQYDVQQDExJERU1PIFpFUk8gVkFMVUUgQ0ECAgRuMA0GCSqG | ||
9 | SIb3DQEBAQUABEBcWwYFHJbJGhiztt7lzue3Lc9CH5WAbyR+2BZ3uv+JxZfRs1PuaWPOwRa0Vgs3 | ||
10 | YwSJoRfxQj2Gk0wFqG1qt6d1MIAGCSqGSIb3DQEHATAaBggqhkiG9w0DAjAOAgIAoAQI8vRlP/Nx | ||
11 | 2iSggASCAZhR5srxyspy7DfomRJ9ff8eMCtaNwEoEx7G25PZRonC57hBvGoScLtEPU3Wp9FEbPN7 | ||
12 | oJESeC+AqMTyTLNy8aQsyC5s53E9UkoIvg62ekYZBbXZqXsrxx4PhiiX3NH8GVh42phB0Chjw0nK | ||
13 | HZeRDmxGY3Cmk+J+l0uVKxbNIfJIKOguLBnhqmnKH/PrnzDt591u0ULy2aTLqRm+4/1Yat/QPb6J | ||
14 | eoKGwNPBbS9ogBdrCNCp9ZFg3Xar2AtQHzyTQIfYeH3SRQUpKmRm5U5o9p5emgEdT+ZfJm/J4tSH | ||
15 | OmbgAFsbHQakA4MBZ4J5qfDJhOA2g5lWk1hIeu5Dn/AaLRZd0yz3oY0Ieo/erPWx/bCqtBzYbMe9 | ||
16 | qSFTedKlbc9EGe3opOTdBZVzK8KH3w3zsy5luxKdOUG59YYb5F1IZiWGiDyuo/HuacX+griu5LeD | ||
17 | bEzOtZnko+TZXvWIko30fD79j3T4MRRhWXbgj2HKza+4vJ0mzcC/1+GPsJjAEAA/JgIEDU4w6/DI | ||
18 | /HQHhLAO3G+9xKD7MvmrzkoAAAAAAAAAAAAA | ||
19 | |||
20 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-e.pem b/src/lib/libcrypto/pkcs7/t/msie-e.pem new file mode 100644 index 0000000000..a2a5e24e74 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-e.pem | |||
@@ -0,0 +1,22 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | MIAGCSqGSIb3DQEHA6CAMIIDkAIBADGCAcIwgcwCAQAwdjBiMREwDwYDVQQHEwhJ | ||
3 | bnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNDAyBgNVBAsTK1ZlcmlT | ||
4 | aWduIENsYXNzIDEgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXICEGBAmILep9sJ | ||
5 | uN2Pkg1gucowDQYJKoZIhvcNAQEBBQAEQIzO7zLBD+pls7xwAYxEEX6Y+u6/f4O9 | ||
6 | v1pY1naTyeNSCoXqZx2FUHYyQZywbeZ6ZFckGLG8xhZWRTeorhlW4qwwgfACAQAw | ||
7 | gZkwgZIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH | ||
8 | EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRzb2Z0IFB0eSBMdGQxIjAgBgNVBAsT | ||
9 | GURFTU9OU1RSQVRJT04gQU5EIFRFU1RJTkcxGzAZBgNVBAMTEkRFTU8gWkVSTyBW | ||
10 | QUxVRSBDQQICBG4wDQYJKoZIhvcNAQEBBQAEQFxbBgUclskaGLO23uXO57ctz0If | ||
11 | lYBvJH7YFne6/4nFl9GzU+5pY87BFrRWCzdjBImhF/FCPYaTTAWobWq3p3UwggHD | ||
12 | BgkqhkiG9w0BBwEwGgYIKoZIhvcNAwIwDgICAKAECPL0ZT/zcdokgIIBmFHmyvHK | ||
13 | ynLsN+iZEn19/x4wK1o3ASgTHsbbk9lGicLnuEG8ahJwu0Q9Tdan0URs83ugkRJ4 | ||
14 | L4CoxPJMs3LxpCzILmzncT1SSgi+DrZ6RhkFtdmpeyvHHg+GKJfc0fwZWHjamEHQ | ||
15 | KGPDScodl5EObEZjcKaT4n6XS5UrFs0h8kgo6C4sGeGqacof8+ufMO3n3W7RQvLZ | ||
16 | pMupGb7j/Vhq39A9vol6gobA08FtL2iAF2sI0Kn1kWDddqvYC1AfPJNAh9h4fdJF | ||
17 | BSkqZGblTmj2nl6aAR1P5l8mb8ni1Ic6ZuAAWxsdBqQDgwFngnmp8MmE4DaDmVaT | ||
18 | WEh67kOf8BotFl3TLPehjQh6j96s9bH9sKq0HNhsx72pIVN50qVtz0QZ7eik5N0F | ||
19 | lXMrwoffDfOzLmW7Ep05Qbn1hhvkXUhmJYaIPK6j8e5pxf6CuK7kt4NsTM61meSj | ||
20 | 5Nle9YiSjfR8Pv2PdPgxFGFZduCPYcrNr7i8nSbNwL/X4Y+wmMAQAD8mAgQNTjDr | ||
21 | 8Mj8dAeEsA7cb73EoPsy+avOSgAAAAA= | ||
22 | -----END PKCS7----- | ||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-enc-01 b/src/lib/libcrypto/pkcs7/t/msie-enc-01 new file mode 100644 index 0000000000..2c93ab6462 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-enc-01 | |||
@@ -0,0 +1,62 @@ | |||
1 | |||
2 | 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 | ||
61 | AAAAAAAAAAAA | ||
62 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-enc-01.pem b/src/lib/libcrypto/pkcs7/t/msie-enc-01.pem new file mode 100644 index 0000000000..9abf00b2f2 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-enc-01.pem | |||
@@ -0,0 +1,66 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | 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 | ||
65 | 6RLfsTyyPgJi0GsAAAAA | ||
66 | -----END PKCS7----- | ||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-enc-02 b/src/lib/libcrypto/pkcs7/t/msie-enc-02 new file mode 100644 index 0000000000..7017055965 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-enc-02 | |||
@@ -0,0 +1,90 @@ | |||
1 | |||
2 | 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 | ||
89 | rZgAAAAAAAAAAAAA | ||
90 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-enc-02.pem b/src/lib/libcrypto/pkcs7/t/msie-enc-02.pem new file mode 100644 index 0000000000..279c5d830b --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-enc-02.pem | |||
@@ -0,0 +1,106 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | MIAGCSqGSIb3DQEHA6CAMIITQAIBADGCAcIwgcwCAQAwdjBiMREwDwYDVQQHEwhJ | ||
3 | bnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNDAyBgNVBAsTK1ZlcmlT | ||
4 | aWduIENsYXNzIDEgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXICEGBAmILep9sJ | ||
5 | uN2Pkg1gucowDQYJKoZIhvcNAQEBBQAEQAKvi2eRLO+jdoiUd8ksZt+iQ0JXoWN0 | ||
6 | M/W9CEv6R1c42pwUIR/1F4RMK9oeyUiv9Z6lzmPaGNmx6XOCoueszVkwgfACAQAw | ||
7 | gZkwgZIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH | ||
8 | EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRzb2Z0IFB0eSBMdGQxIjAgBgNVBAsT | ||
9 | GURFTU9OU1RSQVRJT04gQU5EIFRFU1RJTkcxGzAZBgNVBAMTEkRFTU8gWkVSTyBW | ||
10 | QUxVRSBDQQICBG4wDQYJKoZIhvcNAQEBBQAEQFqcHEo69ShGfcOIVjnmWXLZM+7Y | ||
11 | K/50j8YuvNbqq+dQxk9YY8ZpSU/JYsxmtcnEZdlSJEkpMHAO73V+eh1QQr0wghFz | ||
12 | BgkqhkiG9w0BBwEwGgYIKoZIhvcNAwIwDgICAKAECJsSmRA1jxLjgIIRSIGLVtf+ | ||
13 | pzeB6oXJ9GlfsnIij+DgIOvrYaXC9qywAaUg7zMnln9QMgiih5XpBLgPg5Y/KYp3 | ||
14 | RZeHBwkjTIFwlNYSjE0PbsszsJYUmkDTsCjFUJEdM4+Cbv3g3Kct5w1Q6pVMXJLg | ||
15 | JG4uFUY8CTScVkb9ETbIy3HisCRKJWA57ERLvCr/Fa6gNJKa5Mw1A5Nsp+QQqp0U | ||
16 | uQz93raAPbCdqmHu8qQ88rzbB1k/ysXedRQLlzhqFs2hryD7kHe0gX8nPdlkre8Y | ||
17 | tTQhY76LtbjnV2drXcyCUMONc56KQ2VcuxB0BWjSeyN8a75/rpt6wmiM/PKw0D4g | ||
18 | RmXqA1ZR62X2WKbhKqvG5tQTF1LauZeddeYS4Rb8cLt2VMB5irkKWrHmJ3qyWELY | ||
19 | Lah6AzDDdcf3LEfDo6rO9djqlU8RJwS0ExAuBooVBP6bZJG1tNUUbtxBydQ4PJUH | ||
20 | UhulBMXUMd545fVb8d+lZnKbx3OS2LpILJ66Yeao7jTrEOIgxUq0c6ozzqcQe4Ax | ||
21 | mytwvL57LpMQm9HpLg3xBHOeDwkkNkNMldA3qrzhoS52yc6vDYrI5XA+kjp7LioG | ||
22 | wdSBDyQAXLmWxBpZXjmHp7GBTBsFwouA9kYWP450PZEomxNvzf9SpslLlD+UZeHM | ||
23 | GWdpi5zInESmtHFue2Zyc4Q8Ul761ENTA5N3uqUmWN2Egkv64Nyigv0CGCjoLB6n | ||
24 | q1256S/ZxISiEl5MTwO/LfhhGExsu+cU12aek3Ks1kNhVXHFoqjJ3YB8Hw08VmHV | ||
25 | V0Bh8jdHVABDaRcR5/k00h9VB8zMP1qQmfhE/4q/fZBrGbgWucrGbBHIYlKFq8gF | ||
26 | zZrH4XWvX41le5IEefm9+hFPE6TRJPh1ezDvh2eVhQxFpK7iqpR0z2OxdLJ5fhmB | ||
27 | CCRHZuRpg7p7MWB6cUhrtBZXDytdkARnlqJsLFudjVUTjU9gi+GUt1sUmEf2Bjba | ||
28 | z58UC7CfPIBJGMLjQD1oAQi1GVo9K1ZIaKqUtGA2QEHB2m/aXZg8F3ZDMfHp6Tpc | ||
29 | au9Em4AL42Hrau1ArCk0fnhgA4dbnmZoEVbZJDdMX5xno1tuqEKYdPLJHuZxJhz2 | ||
30 | xdJUNYSFgpDWLJTzvTOEdZWm+CVmLNl60kJkWNh7HdvWeBV1yBquA6+k+r26sIoq | ||
31 | LaZuSq/8QWnNJYZeQpKl8Ib9d8ycQ62Q2sHxLTq+eTYlwkE4Gomi3665IfmE6DS9 | ||
32 | OnFfYO440lKJZJbJ9ET+VN8kkVfCGh3tJdyVTJc95LKJtxKJzaFUDMObCMPfWOz+ | ||
33 | PaTTY8j9qA+GvdRDxwyBw0CJqgIps1pZ+foEZsIBtNyHHNSWjZxImIuWtfYgNmZ9 | ||
34 | dteZkKibWyZYgb64rgMQ2+nViwGMlQaDfYWCOAIj3mQGPTLb0OgFfKNvxBZuj72B | ||
35 | l8tx3oufN9Ah9DwXl+ynXen39ct901v5eakpCC9VC0xke6JBXyXjxw5qtXRbevyT | ||
36 | jKbYkPFkruwrCUL2fVUxV3mBXGagjz2XNTaz3oDSu9GX/UMViGwwHryeSiwX9XOo | ||
37 | /KVNv+i57w2OlY2k72EoK+700fHlcx+EZu+1tIjh8YOVXDg7+nBklcrr21/FABqP | ||
38 | Apm+fBEQ7QQyQUF1aViizQLgyfRl/J9szZKY2S2z0pHJroahmgSQRPwWgk5FEFpW | ||
39 | PXSG0bRJ8SFNZn2zz3cdT6WvA6hg40jrEHSnCmDTWbWshMPvhCKZqXQTbCqYQnwf | ||
40 | FBCtlpJOGVVvqshqIv69DBbLztTZkjjmdKP48v2B5qHlER4T8vewDt3lU5BAGuQn | ||
41 | yRCcm5qOeuwg8PxcKBgFAoLKM+65cczLna/yIRyB/gD4p53MV5RztnnLxw/YvA2h | ||
42 | xgPLVYn4LFIakKGYnlC7rXhfeDuVAMTpL+NVGbLGE8DeJ2KzdUJHrGZdwV+DkUuB | ||
43 | BN9Pz0NtwEX91mabWawiXrxptmWMxnofMYNe5gg34izvm33+Kj/+Jgvej7uImuo+ | ||
44 | LaOQcCiCUv/gwrqA/FnkiheKboF0JDFIh3UJzZ1T/Uqdjv+JcuZjvCc60AufVdm5 | ||
45 | 0zQaj4aZ6PJHybyuU8qT0lQvm083q596yelHHgd7K3J/c8SsfRnTcnSUI8lo7/Hn | ||
46 | N593dZ7kMIc+UNOdzQYSI8KBoNxqOyzuou/GTpaRe3XKADtdzXxy8jY58hwmolrV | ||
47 | UU3Lfay3+bzdNLq0p/GCZ4B5NXkyivJxxiHDoOmHWAzg9pxOV8EYoyponhvF2t3i | ||
48 | kc32y9OhqwUBDZXuiZgtd9W6d3EVcaY6vqOkQGxqDJuMiArC+Hk2qwkK7Mh5qDx6 | ||
49 | q/dVB6PdWr8sVO5J1phIV9u8m5rK7PGnmcDx4sS9eE3soa7gqkVb5H9SrOz/s/DD | ||
50 | 1G6BjakHtlizfJLQhhK9eTvDCUf3pvOhtNyX6OKGsPw1VB+UcC0+mnHnThrszIf9 | ||
51 | q/AXJnpoVUPP3Fr1eGCdLTluIc8lRwuYUH/LGdy88Vyx+joZ626a4cb63W2knQoV | ||
52 | mQwz9Gwgm8RIZMLgZAXimazG8EUz/kz0z2C1Ux/wpii8yof9deLZBpMjt4R0uKhM | ||
53 | VFd/Rdko+JspcfoQ9PttA/aZ7aTYu4bXHBpTpusjTOvWrf9/pC4CScqCJWsS3AlG | ||
54 | BzTInw7fk96f7eVOF5g+d7lEOjPHb4/7naj3pDUlH7Htecq3faYzreT3CbqltvKt | ||
55 | LBR3/aRyIM912RTHuTw+6acOq0vguiK+D62C7ZDVtiCm+BbtNNB/UJm79/OQ5mp5 | ||
56 | bTI0kPmDeycaWTa0Ojpum+c/dpG/iJOBDICj7jHOXSHT7JlGyX6aSFJUltucAnZv | ||
57 | wzhPDmdDaIDiKSk85GqgdDWVfGosSCX9Ph/T3WpIxnwfWSDRtIHkWTjly+pe4yy5 | ||
58 | K6/XISy/L5Zh/fhiI5fjHjgzmlibs2ru4nVw6hBhUvlSSe2BEs5d9h/yNH8Wy3qv | ||
59 | b2D3jh7hkepFtZJGNTHp8ZUC7Ns2JIpQYObsaxdI65i3mMOu7fRwI+0/4ejsWhP6 | ||
60 | KCEiLgwvLg0qM82ma6YB7qHAHboaczRVEffDcJUG4a5uycB0DoZFn+uEaEFyili2 | ||
61 | 0hCn4hVfsqUQk2PT8Mo1tSl5e30xI1YJZrRgiJm9nHRX6fLizngP+ILJLPHZsPvl | ||
62 | SVIfY+/v/FR8feKOjaGhyGF51BAxaM2NIQ4jMP5/X+U5gQybi0E6u7rroDhaHsKm | ||
63 | CMgXqszwXWCpedA/sEbeHpiTC59YlPPSlIOMc9vPKo/mQCfWy/9icUaIfKQldvkl | ||
64 | lUxxNkqu6AbIpHVscbAEzSPs5xbQXU8EZNNCDisFnnpY3nQ3eLnlm89saTJxRb7N | ||
65 | WHRMlmPv7qgD7uMIq3vdOGA7i5wT9MeoNIgK1/DsgH30s6RWjJy4YyyLmRTXPzbj | ||
66 | hbQVpEmiMRbEidIvUx2OjKVxVQIcgtLsa2lvHQ4XL1cpLr5GVtOgy0fMg5OCDUUD | ||
67 | svjgjgLQ3P2Up2nVY5FM6/QpPc5DTLuuR9ekI2/c9Biz09RtcYDUQK2ajdo8h1Iy | ||
68 | KqHFoB7h48OXxXKKY94DY0TGx6PonB/epj8orAw4QKmm5M0vXYwBOqRymCTHTqOJ | ||
69 | GObdLx1euFFyqguzHJOU2gAGZI0z9Lg1yRuFyhdPZyuniIcmtLNxRZ1duYHErcAy | ||
70 | X56qndmLXt7UVkATai/rIMuoJLfAsUnVuTUS5p7tJM754UZT7lTcXvDJgOUNnBRa | ||
71 | IcxC3pxvbrYDJ2iFJ72xkxUP2p74gucqg25XnCVmQuLg6zDDxF6CLuw9isxyXg4p | ||
72 | kneMN//7fpp8GYl9nyZm2yqYYM+jcw0fcVc64L+X4w/gL3H2UMGgxIHSJp7HIG7V | ||
73 | KHtXrNyjdPXXPVUsMsAAimqOr0Lr2sZWirfuivLaPTqhbkvG5PF7K3gT80AOIcd/ | ||
74 | 6EIHBy2hZ7ukfjHmdP4LyQOhTQklaKzGHI0mypq0uFLWJOUlZnVrMiLP1xrWkpC8 | ||
75 | Ro9eo6mfjjQ45z8adC43a47klwTEzvod3rNEFIGJJUEjAN3mbqie7IxoSJknBBJK | ||
76 | 0D9lZEQ8lZWlq7vuN8JdqPM6xh155jMVsPwjLK6Tzkj5BpRD9Tgm3u6HPeCRYQ3v | ||
77 | ky71MaixdjTGbWTorqw+/wv3j0KstajivUjYsDTvZtMa9A/bxWyFQDvqOBxPWhwL | ||
78 | 770+iS0grXRgKrnD4V8wBDTgp4Je4B2aJjaIBPhKV5rrU8wIy1reZUbItRkIsSY/ | ||
79 | 4jRQpHmaU7R8YRyNT2PxOZuNmrE0WqWguxTuhKLs6zQS1geR0BWsTFTI5z9kOJ7p | ||
80 | 8GN0tOYt0KZsT0k3COVtfKl1Nm6kaAs2EoYMiyRQAAzBlhrIjph9IgyQ0J4BhOeM | ||
81 | 64ZlnWawJcZex8wFHWx9QiP1R4aPAPyCr5RVUdf+h6gf+bR4nmmmqLf6dSWBz0O+ | ||
82 | liwL8WDQbYq5hv0H5Un5rgYzNBI9ESgW1CkH120uQFvsdr+GkZZMh2rNbR4CjmWX | ||
83 | I3wU2+XYW7Yhwto2ZYU7r2AuNEpCimnR28U67ABUjp+8YOOnVaKCg1sVmXw36KJa | ||
84 | bMo6OgbZktt7PVyVkKaz8k8mteEQww7FalXORDI3ffpVYeYaAxyNooIZJ4DaecRI | ||
85 | ga6IJcyuQeUZ9ptgiwpwcUKja3Xe5fJk9/TNI9OS4PQSH3bCoL2m8DeC+usJR+j0 | ||
86 | yfduz54pYqYOWlyzyYOfTfagiD7OtCEh24ypdWfd6/N5UzcHkwE4Yy+DnX9JeDtH | ||
87 | 4wL/jreO5BARv0hV78hgac7/+hab2XD/fvsB/+of4Wc3TahsnDUW96xAiz17lEc1 | ||
88 | DKQps76+ZUlCXWd30NlascM07v/zRjPaEKbtPCzmdJE3aIWXJFpgkevvKnGRTasJ | ||
89 | qTavq5rtcPC7WpTZFPf6o+NPVG7FDahOUfIaQo8xkYJFz4JJbPlp54KYdlXB1vec | ||
90 | Lxil+y6MyJirKAt65DzamMq5HsMgoaad9w4t2/kX4STZbLLQP3yJKCT5qhAZguEv | ||
91 | 2WVTXemfbW5GwNjm4ZxeIjDUgRMWVN2AQ0S/x+61m4mx6Cunt+YVfI2g3IU3LKl4 | ||
92 | OszpmpHi8rEWODe0op5WmTD9bgQCSXMzGY2JrMY0MEeydhXevA+Upr4d54TZjGew | ||
93 | rAYsI2BFhRdNomTjrW9LXrTPd2+H+Yt91nsxgKSY7ds0TcQtQMDDthCRK6j26PN0 | ||
94 | Uq170sLfiyOD1857HdOECDljnSfBibjMGYYzvISovw7pCCczq0gMVL1evINos3Nw | ||
95 | aExaoy+HM7qwL8ADZZ8uDBLnXsKnTciQlBaob2rDnb4T4YC2mKgl9zMSGW/0GuGO | ||
96 | 2126BFKMmsbxJhVgTjMbcC6vl40GgZoAsg4c60/Dz4mi9CYhZwWhon9ZC6CUWta1 | ||
97 | 7DnUgroXxGIcA4FVq9k65lw7u1X7l6dV+t453Stfxk7LiFiYeGYXWE6utY6f4R4T | ||
98 | RJgqidc3TUEz3EywrzQKaZxj01Bo8GzCUYNVSdijIgVh+aCafLcnyAMTLlhXbWi2 | ||
99 | G0Ujg12zgLIT1SvCQGPA0A5M6mgkwJC030kQLfcmOkm1KTLEb+8WvJzGTSQScyU/ | ||
100 | W/8DY4IjiYGhriTJFdoPw19o3z9z6zDP0m58+3nTkVx49T2uV00/JxuTEtBbmYL3 | ||
101 | r3at6P4FVQM/mQijh90oTM2b36dNZUl+YGiU35ZlOnHTcLZ9smeiEnBezq41HgPY | ||
102 | hKElUfXUHAPuJQd0QBtyzMHJ8V2N+Q+/jzCcxyGXRXEp6vp9NwAmNvxP099Yoo0R | ||
103 | 9va72BxiPpj/4nmLOOYquH01qOotR6H3li3T9H1+8Vt1ztP4VmBYsAcSruusIQG0 | ||
104 | YWom91yTb3rVbNuU6GF8og6YxvnHeawjHovLBkMEwY/WXodFEaHjFtYp0z9Cbwpj | ||
105 | FK2YAAAAAA== | ||
106 | -----END PKCS7----- | ||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-s-a-e b/src/lib/libcrypto/pkcs7/t/msie-s-a-e new file mode 100644 index 0000000000..0067794d70 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-s-a-e | |||
@@ -0,0 +1,91 @@ | |||
1 | |||
2 | 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 | ||
89 | 5ify04ua9/t8SGrYZPm/l3MkAAAAAAAAAAAAAA== | ||
90 | |||
91 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/msie-s-a-e.pem b/src/lib/libcrypto/pkcs7/t/msie-s-a-e.pem new file mode 100644 index 0000000000..55dbd8f80b --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/msie-s-a-e.pem | |||
@@ -0,0 +1,106 @@ | |||
1 | -----BEGIN PKCS7----- | ||
2 | MIAGCSqGSIb3DQEHA6CAMIITUAIBADGCAcIwgcwCAQAwdjBiMREwDwYDVQQHEwhJ | ||
3 | bnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNDAyBgNVBAsTK1ZlcmlT | ||
4 | aWduIENsYXNzIDEgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXICEGBAmILep9sJ | ||
5 | uN2Pkg1gucowDQYJKoZIhvcNAQEBBQAEQKOxxpIbRTb31+qIQCBOpMVAGnwCLrPO | ||
6 | OXnntxVveTrPhBnsJuoGNJcCMtuHl7tLkd38WsVwOfGXUprTqFpUcY8wgfACAQAw | ||
7 | gZkwgZIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH | ||
8 | EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRzb2Z0IFB0eSBMdGQxIjAgBgNVBAsT | ||
9 | GURFTU9OU1RSQVRJT04gQU5EIFRFU1RJTkcxGzAZBgNVBAMTEkRFTU8gWkVSTyBW | ||
10 | QUxVRSBDQQICBG4wDQYJKoZIhvcNAQEBBQAEQKzIddnXFqK/RRBG86ZVixoXfwAv | ||
11 | ZdfvnDFsKzPn/A6DuDdE/hqJxnFpHiwGiDR/YbWj2ib+G74DSshgX8vj8ZQwghGD | ||
12 | BgkqhkiG9w0BBwEwGgYIKoZIhvcNAwIwDgICAKAECLKM0K58I3HNgIIRWBDP8s+g | ||
13 | l7/6JhZ5PBJ5vPpD1R4pnNDZRabsYu0Qzezdz1IK+maTAhF0SEuNZoEkzIgOIvu3 | ||
14 | UjW8x/2KcHwteABwgRiSk1JyNLwRED0RtvuJ40pIGDvDsHwBMcXEtKUMAOpGChms | ||
15 | HUK1+B/GKancSDFOCeG3JCFnFdbuQFDIVHC6amWslc6ntqVs/sii2Gs4qdzDfQgl | ||
16 | PV/A/FY0wi0j2O5cXRQJtZVKM/MYGjj5c1cy9Q7oymU5ATP/LARD0Tw5kBB7HVnD | ||
17 | 2qrmmmxcHakyxhXmwskaKS6Qxgqq6LPdgr603onxqEtwNSz5UbCq9mLXuCkFOVsQ | ||
18 | /5mZcmmc7re3XJMQHRXkBlxEpZQ6HOUIEzlhRqCo2hhymyZK84rptjORQo6vNakM | ||
19 | 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 | ||
105 | 7OYn8tOLmvf7fEhq2GT5v5dzJAAAAAA= | ||
106 | -----END PKCS7----- | ||
diff --git a/src/lib/libcrypto/pkcs7/t/nav-smime b/src/lib/libcrypto/pkcs7/t/nav-smime new file mode 100644 index 0000000000..6ee4b597a1 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/nav-smime | |||
@@ -0,0 +1,157 @@ | |||
1 | From angela@c2.net.au Thu May 14 13:32:27 1998 | ||
2 | X-UIDL: 83c94dd550e54329bf9571b72038b8c8 | ||
3 | Return-Path: angela@c2.net.au | ||
4 | Received: from cryptsoft.com (play.cryptsoft.com [203.56.44.3]) by pandora.cryptsoft.com (8.8.3/8.7.3) with ESMTP id NAA27838 for <tjh@cryptsoft.com>; Thu, 14 May 1998 13:32:26 +1000 (EST) | ||
5 | Message-ID: <355A6779.4B63E64C@cryptsoft.com> | ||
6 | Date: Thu, 14 May 1998 13:39:37 +1000 | ||
7 | From: Angela van Lent <angela@c2.net.au> | ||
8 | X-Mailer: Mozilla 4.03 [en] (Win95; U) | ||
9 | MIME-Version: 1.0 | ||
10 | To: tjh@cryptsoft.com | ||
11 | Subject: signed | ||
12 | Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="------------ms9A58844C95949ECC78A1C54C" | ||
13 | Content-Length: 2604 | ||
14 | Status: OR | ||
15 | |||
16 | This is a cryptographically signed message in MIME format. | ||
17 | |||
18 | --------------ms9A58844C95949ECC78A1C54C | ||
19 | Content-Type: text/plain; charset=us-ascii | ||
20 | Content-Transfer-Encoding: 7bit | ||
21 | |||
22 | signed body | ||
23 | |||
24 | --------------ms9A58844C95949ECC78A1C54C | ||
25 | Content-Type: application/x-pkcs7-signature; name="smime.p7s" | ||
26 | Content-Transfer-Encoding: base64 | ||
27 | Content-Disposition: attachment; filename="smime.p7s" | ||
28 | Content-Description: S/MIME Cryptographic Signature | ||
29 | |||
30 | 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 | ||
59 | 9CWR6g== | ||
60 | --------------ms9A58844C95949ECC78A1C54C-- | ||
61 | |||
62 | |||
63 | From angela@c2.net.au Thu May 14 13:33:16 1998 | ||
64 | X-UIDL: 8f076c44ff7c5967fd5b00c4588a8731 | ||
65 | Return-Path: angela@c2.net.au | ||
66 | Received: from cryptsoft.com (play.cryptsoft.com [203.56.44.3]) by pandora.cryptsoft.com (8.8.3/8.7.3) with ESMTP id NAA27847 for <tjh@cryptsoft.com>; Thu, 14 May 1998 13:33:15 +1000 (EST) | ||
67 | Message-ID: <355A67AB.2AF38806@cryptsoft.com> | ||
68 | Date: Thu, 14 May 1998 13:40:27 +1000 | ||
69 | From: Angela van Lent <angela@c2.net.au> | ||
70 | X-Mailer: Mozilla 4.03 [en] (Win95; U) | ||
71 | MIME-Version: 1.0 | ||
72 | To: tjh@cryptsoft.com | ||
73 | Subject: signed | ||
74 | Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="------------msD7863B84BD61E02C407F2F5E" | ||
75 | Content-Length: 2679 | ||
76 | Status: OR | ||
77 | |||
78 | This is a cryptographically signed message in MIME format. | ||
79 | |||
80 | --------------msD7863B84BD61E02C407F2F5E | ||
81 | Content-Type: text/plain; charset=us-ascii | ||
82 | Content-Transfer-Encoding: 7bit | ||
83 | |||
84 | signed body 2 | ||
85 | |||
86 | --------------msD7863B84BD61E02C407F2F5E | ||
87 | Content-Type: application/x-pkcs7-signature; name="smime.p7s" | ||
88 | Content-Transfer-Encoding: base64 | ||
89 | Content-Disposition: attachment; filename="smime.p7s" | ||
90 | Content-Description: S/MIME Cryptographic Signature | ||
91 | |||
92 | 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 | ||
122 | Zp8SSVVY | ||
123 | --------------msD7863B84BD61E02C407F2F5E-- | ||
124 | |||
125 | |||
126 | From angela@c2.net.au Thu May 14 14:05:32 1998 | ||
127 | X-UIDL: a7d629b4b9acacaee8b39371b860a32a | ||
128 | Return-Path: angela@c2.net.au | ||
129 | Received: from cryptsoft.com (play.cryptsoft.com [203.56.44.3]) by pandora.cryptsoft.com (8.8.3/8.7.3) with ESMTP id OAA28033 for <tjh@cryptsoft.com>; Thu, 14 May 1998 14:05:32 +1000 (EST) | ||
130 | Message-ID: <355A6F3B.AC385981@cryptsoft.com> | ||
131 | Date: Thu, 14 May 1998 14:12:43 +1000 | ||
132 | From: Angela van Lent <angela@c2.net.au> | ||
133 | X-Mailer: Mozilla 4.03 [en] (Win95; U) | ||
134 | MIME-Version: 1.0 | ||
135 | To: tjh@cryptsoft.com | ||
136 | Subject: encrypted | ||
137 | Content-Type: application/x-pkcs7-mime; name="smime.p7m" | ||
138 | Content-Transfer-Encoding: base64 | ||
139 | Content-Disposition: attachment; filename="smime.p7m" | ||
140 | Content-Description: S/MIME Encrypted Message | ||
141 | Content-Length: 905 | ||
142 | Status: OR | ||
143 | |||
144 | MIAGCSqGSIb3DQEHA6CAMIACAQAxggHmMIHwAgEAMIGZMIGSMQswCQYDVQQGEwJBVTETMBEG | ||
145 | A1UECBMKUXVlZW5zbGFuZDERMA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29m | ||
146 | dCBQdHkgTHRkMSIwIAYDVQQLExlERU1PTlNUUkFUSU9OIEFORCBURVNUSU5HMRswGQYDVQQD | ||
147 | ExJERU1PIFpFUk8gVkFMVUUgQ0ECAgR+MA0GCSqGSIb3DQEBAQUABEA92N29Yk39RUY2tIVd | ||
148 | exGT2MFX3J6H8LB8aDRJjw7843ALgJ5zXpM5+f80QkAWwEN2A6Pl3VxiCeKLi435zXVyMIHw | ||
149 | AgEAMIGZMIGSMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDERMA8GA1UEBxMI | ||
150 | QnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29mdCBQdHkgTHRkMSIwIAYDVQQLExlERU1PTlNU | ||
151 | UkFUSU9OIEFORCBURVNUSU5HMRswGQYDVQQDExJERU1PIFpFUk8gVkFMVUUgQ0ECAgRuMA0G | ||
152 | CSqGSIb3DQEBAQUABECR9IfyHtvnjFmZ8B2oUCEs1vxMsG0u1kxKE4RMPFyDqDCEARq7zXMg | ||
153 | nzSUI7Wgv5USSKDqcLRJeW+jvYURv/nJMIAGCSqGSIb3DQEHATAaBggqhkiG9w0DAjAOAgIA | ||
154 | oAQIrLqrij2ZMpeggAQoibtn6reRZWuWk5Iv5IAhgitr8EYE4w4ySQ7EMB6mTlBoFpccUMWX | ||
155 | BwQgQn1UoWCvYAlhDzURdbui64Dc0rS2wtj+kE/InS6y25EEEPe4NUKaF8/UlE+lo3LtILQE | ||
156 | CL3uV8k7m0iqAAAAAAAAAAAAAA== | ||
157 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/s.pem b/src/lib/libcrypto/pkcs7/t/s.pem new file mode 100644 index 0000000000..4fa925b182 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/s.pem | |||
@@ -0,0 +1,57 @@ | |||
1 | -----BEGIN RSA PRIVATE KEY----- | ||
2 | MIIBOgIBAAJBAK3nI4nuDYe3nDJES5WBc90igEstxWC4/h4YY+/ciYki35U8ets9 | ||
3 | mgaoCNYp/e9BCZHtvK2Y+fYokGJv5+cMTQsCAwEAAQJBAIHpvXvqEcOEoDRRHuIG | ||
4 | fkcB4jPHcr9KE9TpxabH6xs9beN6OJnkePXAHwaz5MnUgSnbpOKq+cw8miKjXwe/ | ||
5 | zVECIQDVLwncT2lRmXarEYHzb+q/0uaSvKhWKKt3kJasLNTrAwIhANDUc/ghut29 | ||
6 | p3jJYjurzUKuG774/5eLjPLsxPPIZzNZAiA/10hSq41UnGqHLEUIS9m2/EeEZe7b | ||
7 | bm567dfRU9OnVQIgDo8ROrZXSchEGbaog5J5r/Fle83uO8l93R3GqVxKXZkCIFfk | ||
8 | IPD5PIYQAyyod3hyKKza7ZP4CGY4oOfZetbkSGGG | ||
9 | -----END RSA PRIVATE KEY----- | ||
10 | issuer :/C=AU/SP=Queensland/L=Brisbane/O=Cryptsoft Pty Ltd/OU=DEMONSTRATION AND TESTING/CN=DEMO ZERO VALUE CA | ||
11 | subject:/C=AU/SP=Queensland/L=Brisbane/O=Cryptsoft Pty Ltd/OU=SMIME 003/CN=Information/Email=info@cryptsoft.com | ||
12 | serial :047D | ||
13 | |||
14 | Certificate: | ||
15 | Data: | ||
16 | Version: 3 (0x2) | ||
17 | Serial Number: 1149 (0x47d) | ||
18 | Signature Algorithm: md5withRSAEncryption | ||
19 | Issuer: C=AU, SP=Queensland, L=Brisbane, O=Cryptsoft Pty Ltd, OU=DEMONSTRATION AND TESTING, CN=DEMO ZERO VALUE CA | ||
20 | Validity | ||
21 | Not Before: May 13 05:40:58 1998 GMT | ||
22 | Not After : May 12 05:40:58 2000 GMT | ||
23 | Subject: C=AU, SP=Queensland, L=Brisbane, O=Cryptsoft Pty Ltd, OU=SMIME 003, CN=Information/Email=info@cryptsoft.com | ||
24 | Subject Public Key Info: | ||
25 | Public Key Algorithm: rsaEncryption | ||
26 | Modulus: | ||
27 | 00:ad:e7:23:89:ee:0d:87:b7:9c:32:44:4b:95:81: | ||
28 | 73:dd:22:80:4b:2d:c5:60:b8:fe:1e:18:63:ef:dc: | ||
29 | 89:89:22:df:95:3c:7a:db:3d:9a:06:a8:08:d6:29: | ||
30 | fd:ef:41:09:91:ed:bc:ad:98:f9:f6:28:90:62:6f: | ||
31 | e7:e7:0c:4d:0b | ||
32 | Exponent: 65537 (0x10001) | ||
33 | X509v3 extensions: | ||
34 | Netscape Comment: | ||
35 | Generated with SSLeay | ||
36 | Signature Algorithm: md5withRSAEncryption | ||
37 | 52:15:ea:88:f4:f0:f9:0b:ef:ce:d5:f8:83:40:61:16:5e:55: | ||
38 | f9:ce:2d:d1:8b:31:5c:03:c6:2d:10:7c:61:d5:5c:0a:42:97: | ||
39 | d1:fd:65:b6:b6:84:a5:39:ec:46:ec:fc:e0:0d:d9:22:da:1b: | ||
40 | 50:74:ad:92:cb:4e:90:e5:fa:7d | ||
41 | |||
42 | -----BEGIN CERTIFICATE----- | ||
43 | MIICTDCCAfagAwIBAgICBH0wDQYJKoZIhvcNAQEEBQAwgZIxCzAJBgNVBAYTAkFV | ||
44 | MRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UE | ||
45 | ChMRQ3J5cHRzb2Z0IFB0eSBMdGQxIjAgBgNVBAsTGURFTU9OU1RSQVRJT04gQU5E | ||
46 | IFRFU1RJTkcxGzAZBgNVBAMTEkRFTU8gWkVSTyBWQUxVRSBDQTAeFw05ODA1MTMw | ||
47 | NTQwNThaFw0wMDA1MTIwNTQwNThaMIGeMQswCQYDVQQGEwJBVTETMBEGA1UECBMK | ||
48 | UXVlZW5zbGFuZDERMA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29m | ||
49 | dCBQdHkgTHRkMRIwEAYDVQQLEwlTTUlNRSAwMDMxFDASBgNVBAMTC0luZm9ybWF0 | ||
50 | aW9uMSEwHwYJKoZIhvcNAQkBFhJpbmZvQGNyeXB0c29mdC5jb20wXDANBgkqhkiG | ||
51 | 9w0BAQEFAANLADBIAkEArecjie4Nh7ecMkRLlYFz3SKASy3FYLj+Hhhj79yJiSLf | ||
52 | lTx62z2aBqgI1in970EJke28rZj59iiQYm/n5wxNCwIDAQABoygwJjAkBglghkgB | ||
53 | hvhCAQ0EFxYVR2VuZXJhdGVkIHdpdGggU1NMZWF5MA0GCSqGSIb3DQEBBAUAA0EA | ||
54 | UhXqiPTw+QvvztX4g0BhFl5V+c4t0YsxXAPGLRB8YdVcCkKX0f1ltraEpTnsRuz8 | ||
55 | 4A3ZItobUHStkstOkOX6fQ== | ||
56 | -----END CERTIFICATE----- | ||
57 | |||
diff --git a/src/lib/libcrypto/pkcs7/t/server.pem b/src/lib/libcrypto/pkcs7/t/server.pem new file mode 100644 index 0000000000..989baf8709 --- /dev/null +++ b/src/lib/libcrypto/pkcs7/t/server.pem | |||
@@ -0,0 +1,57 @@ | |||
1 | issuer :/C=AU/SP=Queensland/L=Brisbane/O=Cryptsoft Pty Ltd/OU=DEMONSTRATION AND TESTING/CN=DEMO ZERO VALUE CA | ||
2 | subject:/C=AU/SP=Queensland/L=Brisbane/O=Cryptsoft Pty Ltd/OU=SMIME 003/CN=Information/Email=info@cryptsoft.com | ||
3 | serial :047D | ||
4 | |||
5 | Certificate: | ||
6 | Data: | ||
7 | Version: 3 (0x2) | ||
8 | Serial Number: 1149 (0x47d) | ||
9 | Signature Algorithm: md5withRSAEncryption | ||
10 | Issuer: C=AU, SP=Queensland, L=Brisbane, O=Cryptsoft Pty Ltd, OU=DEMONSTRATION AND TESTING, CN=DEMO ZERO VALUE CA | ||
11 | Validity | ||
12 | Not Before: May 13 05:40:58 1998 GMT | ||
13 | Not After : May 12 05:40:58 2000 GMT | ||
14 | Subject: C=AU, SP=Queensland, L=Brisbane, O=Cryptsoft Pty Ltd, OU=SMIME 003, CN=Information/Email=info@cryptsoft.com | ||
15 | Subject Public Key Info: | ||
16 | Public Key Algorithm: rsaEncryption | ||
17 | Modulus: | ||
18 | 00:ad:e7:23:89:ee:0d:87:b7:9c:32:44:4b:95:81: | ||
19 | 73:dd:22:80:4b:2d:c5:60:b8:fe:1e:18:63:ef:dc: | ||
20 | 89:89:22:df:95:3c:7a:db:3d:9a:06:a8:08:d6:29: | ||
21 | fd:ef:41:09:91:ed:bc:ad:98:f9:f6:28:90:62:6f: | ||
22 | e7:e7:0c:4d:0b | ||
23 | Exponent: 65537 (0x10001) | ||
24 | X509v3 extensions: | ||
25 | Netscape Comment: | ||
26 | Generated with SSLeay | ||
27 | Signature Algorithm: md5withRSAEncryption | ||
28 | 52:15:ea:88:f4:f0:f9:0b:ef:ce:d5:f8:83:40:61:16:5e:55: | ||
29 | f9:ce:2d:d1:8b:31:5c:03:c6:2d:10:7c:61:d5:5c:0a:42:97: | ||
30 | d1:fd:65:b6:b6:84:a5:39:ec:46:ec:fc:e0:0d:d9:22:da:1b: | ||
31 | 50:74:ad:92:cb:4e:90:e5:fa:7d | ||
32 | |||
33 | -----BEGIN CERTIFICATE----- | ||
34 | MIICTDCCAfagAwIBAgICBH0wDQYJKoZIhvcNAQEEBQAwgZIxCzAJBgNVBAYTAkFV | ||
35 | MRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UE | ||
36 | ChMRQ3J5cHRzb2Z0IFB0eSBMdGQxIjAgBgNVBAsTGURFTU9OU1RSQVRJT04gQU5E | ||
37 | IFRFU1RJTkcxGzAZBgNVBAMTEkRFTU8gWkVSTyBWQUxVRSBDQTAeFw05ODA1MTMw | ||
38 | NTQwNThaFw0wMDA1MTIwNTQwNThaMIGeMQswCQYDVQQGEwJBVTETMBEGA1UECBMK | ||
39 | UXVlZW5zbGFuZDERMA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0c29m | ||
40 | dCBQdHkgTHRkMRIwEAYDVQQLEwlTTUlNRSAwMDMxFDASBgNVBAMTC0luZm9ybWF0 | ||
41 | aW9uMSEwHwYJKoZIhvcNAQkBFhJpbmZvQGNyeXB0c29mdC5jb20wXDANBgkqhkiG | ||
42 | 9w0BAQEFAANLADBIAkEArecjie4Nh7ecMkRLlYFz3SKASy3FYLj+Hhhj79yJiSLf | ||
43 | lTx62z2aBqgI1in970EJke28rZj59iiQYm/n5wxNCwIDAQABoygwJjAkBglghkgB | ||
44 | hvhCAQ0EFxYVR2VuZXJhdGVkIHdpdGggU1NMZWF5MA0GCSqGSIb3DQEBBAUAA0EA | ||
45 | UhXqiPTw+QvvztX4g0BhFl5V+c4t0YsxXAPGLRB8YdVcCkKX0f1ltraEpTnsRuz8 | ||
46 | 4A3ZItobUHStkstOkOX6fQ== | ||
47 | -----END CERTIFICATE----- | ||
48 | |||
49 | -----BEGIN RSA PRIVATE KEY----- | ||
50 | MIIBOgIBAAJBAK3nI4nuDYe3nDJES5WBc90igEstxWC4/h4YY+/ciYki35U8ets9 | ||
51 | mgaoCNYp/e9BCZHtvK2Y+fYokGJv5+cMTQsCAwEAAQJBAIHpvXvqEcOEoDRRHuIG | ||
52 | fkcB4jPHcr9KE9TpxabH6xs9beN6OJnkePXAHwaz5MnUgSnbpOKq+cw8miKjXwe/ | ||
53 | zVECIQDVLwncT2lRmXarEYHzb+q/0uaSvKhWKKt3kJasLNTrAwIhANDUc/ghut29 | ||
54 | p3jJYjurzUKuG774/5eLjPLsxPPIZzNZAiA/10hSq41UnGqHLEUIS9m2/EeEZe7b | ||
55 | bm567dfRU9OnVQIgDo8ROrZXSchEGbaog5J5r/Fle83uO8l93R3GqVxKXZkCIFfk | ||
56 | IPD5PIYQAyyod3hyKKza7ZP4CGY4oOfZetbkSGGG | ||
57 | -----END RSA PRIVATE KEY----- | ||