~ubuntu-branches/ubuntu/utopic/golang/utopic

1 by Ondřej Surý
Import upstream version 2011.03.07.1
1
// Copyright 2009 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
5
package rsa
6
7
import (
8
	"bytes"
9
	"crypto/rand"
10
	"crypto/sha1"
1.1.13 by Ondřej Surý
Import upstream version 1
11
	"math/big"
1 by Ondřej Surý
Import upstream version 2011.03.07.1
12
	"testing"
13
)
14
15
func TestKeyGeneration(t *testing.T) {
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
16
	size := 1024
17
	if testing.Short() {
18
		size = 128
19
	}
20
	priv, err := GenerateKey(rand.Reader, size)
21
	if err != nil {
22
		t.Errorf("failed to generate key")
23
	}
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
24
	if bits := priv.N.BitLen(); bits != size {
25
		t.Errorf("key too short (%d vs %d)", bits, size)
26
	}
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
27
	testKeyBasics(t, priv)
28
}
29
30
func Test3PrimeKeyGeneration(t *testing.T) {
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
31
	size := 768
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
32
	if testing.Short() {
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
33
		size = 256
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
34
	}
35
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
36
	priv, err := GenerateMultiPrimeKey(rand.Reader, 3, size)
37
	if err != nil {
38
		t.Errorf("failed to generate key")
39
	}
40
	testKeyBasics(t, priv)
41
}
42
43
func Test4PrimeKeyGeneration(t *testing.T) {
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
44
	size := 768
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
45
	if testing.Short() {
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
46
		size = 256
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
47
	}
48
49
	priv, err := GenerateMultiPrimeKey(rand.Reader, 4, size)
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
50
	if err != nil {
51
		t.Errorf("failed to generate key")
52
	}
53
	testKeyBasics(t, priv)
54
}
55
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
56
func TestNPrimeKeyGeneration(t *testing.T) {
57
	primeSize := 64
58
	maxN := 24
59
	if testing.Short() {
60
		primeSize = 16
61
		maxN = 16
62
	}
63
	// Test that generation of N-prime keys works for N > 4.
64
	for n := 5; n < maxN; n++ {
65
		priv, err := GenerateMultiPrimeKey(rand.Reader, n, 64+n*primeSize)
66
		if err == nil {
67
			testKeyBasics(t, priv)
68
		} else {
69
			t.Errorf("failed to generate %d-prime key", n)
70
		}
71
	}
72
}
73
74
func TestGnuTLSKey(t *testing.T) {
75
	// This is a key generated by `certtool --generate-privkey --bits 128`.
76
	// It's such that de ≢ 1 mod φ(n), but is congruent mod the order of
77
	// the group.
78
	priv := &PrivateKey{
79
		PublicKey: PublicKey{
80
			N: fromBase10("290684273230919398108010081414538931343"),
81
			E: 65537,
82
		},
83
		D: fromBase10("31877380284581499213530787347443987241"),
84
		Primes: []*big.Int{
85
			fromBase10("16775196964030542637"),
86
			fromBase10("17328218193455850539"),
87
		},
88
	}
89
	testKeyBasics(t, priv)
90
}
91
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
92
func testKeyBasics(t *testing.T, priv *PrivateKey) {
93
	if err := priv.Validate(); err != nil {
94
		t.Errorf("Validate() failed: %s", err)
95
	}
1.2.3 by Michael Stapelberg
Import upstream version 1.1~hg20130405
96
	if priv.D.Cmp(priv.N) > 0 {
97
		t.Errorf("private exponent too large")
98
	}
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
99
1 by Ondřej Surý
Import upstream version 2011.03.07.1
100
	pub := &priv.PublicKey
101
	m := big.NewInt(42)
102
	c := encrypt(new(big.Int), pub, m)
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
103
1 by Ondřej Surý
Import upstream version 2011.03.07.1
104
	m2, err := decrypt(nil, priv, c)
105
	if err != nil {
106
		t.Errorf("error while decrypting: %s", err)
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
107
		return
1 by Ondřej Surý
Import upstream version 2011.03.07.1
108
	}
109
	if m.Cmp(m2) != 0 {
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
110
		t.Errorf("got:%v, want:%v (%+v)", m2, m, priv)
1 by Ondřej Surý
Import upstream version 2011.03.07.1
111
	}
112
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
113
	m3, err := decrypt(rand.Reader, priv, c)
1 by Ondřej Surý
Import upstream version 2011.03.07.1
114
	if err != nil {
115
		t.Errorf("error while decrypting (blind): %s", err)
116
	}
117
	if m.Cmp(m3) != 0 {
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
118
		t.Errorf("(blind) got:%v, want:%v (%#v)", m3, m, priv)
1 by Ondřej Surý
Import upstream version 2011.03.07.1
119
	}
120
}
121
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
122
func fromBase10(base10 string) *big.Int {
123
	i := new(big.Int)
124
	i.SetString(base10, 10)
125
	return i
126
}
127
128
func BenchmarkRSA2048Decrypt(b *testing.B) {
129
	b.StopTimer()
130
	priv := &PrivateKey{
131
		PublicKey: PublicKey{
132
			N: fromBase10("14314132931241006650998084889274020608918049032671858325988396851334124245188214251956198731333464217832226406088020736932173064754214329009979944037640912127943488972644697423190955557435910767690712778463524983667852819010259499695177313115447116110358524558307947613422897787329221478860907963827160223559690523660574329011927531289655711860504630573766609239332569210831325633840174683944553667352219670930408593321661375473885147973879086994006440025257225431977751512374815915392249179976902953721486040787792801849818254465486633791826766873076617116727073077821584676715609985777563958286637185868165868520557"),
133
			E: 3,
134
		},
135
		D: fromBase10("9542755287494004433998723259516013739278699355114572217325597900889416163458809501304132487555642811888150937392013824621448709836142886006653296025093941418628992648429798282127303704957273845127141852309016655778568546006839666463451542076964744073572349705538631742281931858219480985907271975884773482372966847639853897890615456605598071088189838676728836833012254065983259638538107719766738032720239892094196108713378822882383694456030043492571063441943847195939549773271694647657549658603365629458610273821292232646334717612674519997533901052790334279661754176490593041941863932308687197618671528035670452762731"),
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
136
		Primes: []*big.Int{
137
			fromBase10("130903255182996722426771613606077755295583329135067340152947172868415809027537376306193179624298874215608270802054347609836776473930072411958753044562214537013874103802006369634761074377213995983876788718033850153719421695468704276694983032644416930879093914927146648402139231293035971427838068945045019075433"),
138
			fromBase10("109348945610485453577574767652527472924289229538286649661240938988020367005475727988253438647560958573506159449538793540472829815903949343191091817779240101054552748665267574271163617694640513549693841337820602726596756351006149518830932261246698766355347898158548465400674856021497190430791824869615170301029"),
139
		},
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
140
	}
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
141
	priv.Precompute()
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
142
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
143
	c := fromBase10("8472002792838218989464636159316973636630013835787202418124758118372358261975764365740026024610403138425986214991379012696600761514742817632790916315594342398720903716529235119816755589383377471752116975374952783629225022962092351886861518911824745188989071172097120352727368980275252089141512321893536744324822590480751098257559766328893767334861211872318961900897793874075248286439689249972315699410830094164386544311554704755110361048571142336148077772023880664786019636334369759624917224888206329520528064315309519262325023881707530002540634660750469137117568199824615333883758410040459705787022909848740188613313")
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
144
145
	b.StartTimer()
146
147
	for i := 0; i < b.N; i++ {
148
		decrypt(nil, priv, c)
149
	}
150
}
151
152
func Benchmark3PrimeRSA2048Decrypt(b *testing.B) {
153
	b.StopTimer()
154
	priv := &PrivateKey{
155
		PublicKey: PublicKey{
156
			N: fromBase10("16346378922382193400538269749936049106320265317511766357599732575277382844051791096569333808598921852351577762718529818072849191122419410612033592401403764925096136759934497687765453905884149505175426053037420486697072448609022753683683718057795566811401938833367954642951433473337066311978821180526439641496973296037000052546108507805269279414789035461158073156772151892452251106173507240488993608650881929629163465099476849643165682709047462010581308719577053905787496296934240246311806555924593059995202856826239801816771116902778517096212527979497399966526283516447337775509777558018145573127308919204297111496233"),
157
			E: 3,
158
		},
159
		D: fromBase10("10897585948254795600358846499957366070880176878341177571733155050184921896034527397712889205732614568234385175145686545381899460748279607074689061600935843283397424506622998458510302603922766336783617368686090042765718290914099334449154829375179958369993407724946186243249568928237086215759259909861748642124071874879861299389874230489928271621259294894142840428407196932444474088857746123104978617098858619445675532587787023228852383149557470077802718705420275739737958953794088728369933811184572620857678792001136676902250566845618813972833750098806496641114644760255910789397593428910198080271317419213080834885003"),
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
160
		Primes: []*big.Int{
161
			fromBase10("1025363189502892836833747188838978207017355117492483312747347695538428729137306368764177201532277413433182799108299960196606011786562992097313508180436744488171474690412562218914213688661311117337381958560443"),
162
			fromBase10("3467903426626310123395340254094941045497208049900750380025518552334536945536837294961497712862519984786362199788654739924501424784631315081391467293694361474867825728031147665777546570788493758372218019373"),
163
			fromBase10("4597024781409332673052708605078359346966325141767460991205742124888960305710298765592730135879076084498363772408626791576005136245060321874472727132746643162385746062759369754202494417496879741537284589047"),
164
		},
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
165
	}
1.1.2 by Ondřej Surý
Import upstream version 2011.04.27
166
	priv.Precompute()
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
167
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
168
	c := fromBase10("8472002792838218989464636159316973636630013835787202418124758118372358261975764365740026024610403138425986214991379012696600761514742817632790916315594342398720903716529235119816755589383377471752116975374952783629225022962092351886861518911824745188989071172097120352727368980275252089141512321893536744324822590480751098257559766328893767334861211872318961900897793874075248286439689249972315699410830094164386544311554704755110361048571142336148077772023880664786019636334369759624917224888206329520528064315309519262325023881707530002540634660750469137117568199824615333883758410040459705787022909848740188613313")
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
169
170
	b.StartTimer()
171
172
	for i := 0; i < b.N; i++ {
173
		decrypt(nil, priv, c)
174
	}
175
}
176
1 by Ondřej Surý
Import upstream version 2011.03.07.1
177
type testEncryptOAEPMessage struct {
178
	in   []byte
179
	seed []byte
180
	out  []byte
181
}
182
183
type testEncryptOAEPStruct struct {
184
	modulus string
185
	e       int
186
	d       string
187
	msgs    []testEncryptOAEPMessage
188
}
189
190
func TestEncryptOAEP(t *testing.T) {
191
	sha1 := sha1.New()
192
	n := new(big.Int)
193
	for i, test := range testEncryptOAEPData {
194
		n.SetString(test.modulus, 16)
195
		public := PublicKey{n, test.e}
196
197
		for j, message := range test.msgs {
198
			randomSource := bytes.NewBuffer(message.seed)
199
			out, err := EncryptOAEP(sha1, randomSource, &public, message.in, nil)
200
			if err != nil {
201
				t.Errorf("#%d,%d error: %s", i, j, err)
202
			}
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
203
			if !bytes.Equal(out, message.out) {
1 by Ondřej Surý
Import upstream version 2011.03.07.1
204
				t.Errorf("#%d,%d bad result: %x (want %x)", i, j, out, message.out)
205
			}
206
		}
207
	}
208
}
209
210
func TestDecryptOAEP(t *testing.T) {
211
	random := rand.Reader
212
213
	sha1 := sha1.New()
214
	n := new(big.Int)
215
	d := new(big.Int)
216
	for i, test := range testEncryptOAEPData {
217
		n.SetString(test.modulus, 16)
218
		d.SetString(test.d, 16)
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
219
		private := new(PrivateKey)
220
		private.PublicKey = PublicKey{n, test.e}
221
		private.D = d
1 by Ondřej Surý
Import upstream version 2011.03.07.1
222
223
		for j, message := range test.msgs {
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
224
			out, err := DecryptOAEP(sha1, nil, private, message.out, nil)
1 by Ondřej Surý
Import upstream version 2011.03.07.1
225
			if err != nil {
226
				t.Errorf("#%d,%d error: %s", i, j, err)
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
227
			} else if !bytes.Equal(out, message.in) {
1 by Ondřej Surý
Import upstream version 2011.03.07.1
228
				t.Errorf("#%d,%d bad result: %#v (want %#v)", i, j, out, message.in)
229
			}
230
231
			// Decrypt with blinding.
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
232
			out, err = DecryptOAEP(sha1, random, private, message.out, nil)
1 by Ondřej Surý
Import upstream version 2011.03.07.1
233
			if err != nil {
234
				t.Errorf("#%d,%d (blind) error: %s", i, j, err)
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
235
			} else if !bytes.Equal(out, message.in) {
1 by Ondřej Surý
Import upstream version 2011.03.07.1
236
				t.Errorf("#%d,%d (blind) bad result: %#v (want %#v)", i, j, out, message.in)
237
			}
238
		}
1.1.1 by Ondřej Surý
Import upstream version 2011.04.13
239
		if testing.Short() {
240
			break
241
		}
1 by Ondřej Surý
Import upstream version 2011.03.07.1
242
	}
243
}
244
245
// testEncryptOAEPData contains a subset of the vectors from RSA's "Test vectors for RSA-OAEP".
246
var testEncryptOAEPData = []testEncryptOAEPStruct{
247
	// Key 1
248
	{"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb",
249
		65537,
250
		"53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1",
251
		[]testEncryptOAEPMessage{
252
			// Example 1.1
253
			{
254
				[]byte{0x66, 0x28, 0x19, 0x4e, 0x12, 0x07, 0x3d, 0xb0,
255
					0x3b, 0xa9, 0x4c, 0xda, 0x9e, 0xf9, 0x53, 0x23, 0x97,
256
					0xd5, 0x0d, 0xba, 0x79, 0xb9, 0x87, 0x00, 0x4a, 0xfe,
257
					0xfe, 0x34,
258
				},
259
				[]byte{0x18, 0xb7, 0x76, 0xea, 0x21, 0x06, 0x9d, 0x69,
260
					0x77, 0x6a, 0x33, 0xe9, 0x6b, 0xad, 0x48, 0xe1, 0xdd,
261
					0xa0, 0xa5, 0xef,
262
				},
263
				[]byte{0x35, 0x4f, 0xe6, 0x7b, 0x4a, 0x12, 0x6d, 0x5d,
264
					0x35, 0xfe, 0x36, 0xc7, 0x77, 0x79, 0x1a, 0x3f, 0x7b,
265
					0xa1, 0x3d, 0xef, 0x48, 0x4e, 0x2d, 0x39, 0x08, 0xaf,
266
					0xf7, 0x22, 0xfa, 0xd4, 0x68, 0xfb, 0x21, 0x69, 0x6d,
267
					0xe9, 0x5d, 0x0b, 0xe9, 0x11, 0xc2, 0xd3, 0x17, 0x4f,
268
					0x8a, 0xfc, 0xc2, 0x01, 0x03, 0x5f, 0x7b, 0x6d, 0x8e,
269
					0x69, 0x40, 0x2d, 0xe5, 0x45, 0x16, 0x18, 0xc2, 0x1a,
270
					0x53, 0x5f, 0xa9, 0xd7, 0xbf, 0xc5, 0xb8, 0xdd, 0x9f,
271
					0xc2, 0x43, 0xf8, 0xcf, 0x92, 0x7d, 0xb3, 0x13, 0x22,
272
					0xd6, 0xe8, 0x81, 0xea, 0xa9, 0x1a, 0x99, 0x61, 0x70,
273
					0xe6, 0x57, 0xa0, 0x5a, 0x26, 0x64, 0x26, 0xd9, 0x8c,
274
					0x88, 0x00, 0x3f, 0x84, 0x77, 0xc1, 0x22, 0x70, 0x94,
275
					0xa0, 0xd9, 0xfa, 0x1e, 0x8c, 0x40, 0x24, 0x30, 0x9c,
276
					0xe1, 0xec, 0xcc, 0xb5, 0x21, 0x00, 0x35, 0xd4, 0x7a,
277
					0xc7, 0x2e, 0x8a,
278
				},
279
			},
280
			// Example 1.2
281
			{
282
				[]byte{0x75, 0x0c, 0x40, 0x47, 0xf5, 0x47, 0xe8, 0xe4,
283
					0x14, 0x11, 0x85, 0x65, 0x23, 0x29, 0x8a, 0xc9, 0xba,
284
					0xe2, 0x45, 0xef, 0xaf, 0x13, 0x97, 0xfb, 0xe5, 0x6f,
285
					0x9d, 0xd5,
286
				},
287
				[]byte{0x0c, 0xc7, 0x42, 0xce, 0x4a, 0x9b, 0x7f, 0x32,
288
					0xf9, 0x51, 0xbc, 0xb2, 0x51, 0xef, 0xd9, 0x25, 0xfe,
289
					0x4f, 0xe3, 0x5f,
290
				},
291
				[]byte{0x64, 0x0d, 0xb1, 0xac, 0xc5, 0x8e, 0x05, 0x68,
292
					0xfe, 0x54, 0x07, 0xe5, 0xf9, 0xb7, 0x01, 0xdf, 0xf8,
293
					0xc3, 0xc9, 0x1e, 0x71, 0x6c, 0x53, 0x6f, 0xc7, 0xfc,
294
					0xec, 0x6c, 0xb5, 0xb7, 0x1c, 0x11, 0x65, 0x98, 0x8d,
295
					0x4a, 0x27, 0x9e, 0x15, 0x77, 0xd7, 0x30, 0xfc, 0x7a,
296
					0x29, 0x93, 0x2e, 0x3f, 0x00, 0xc8, 0x15, 0x15, 0x23,
297
					0x6d, 0x8d, 0x8e, 0x31, 0x01, 0x7a, 0x7a, 0x09, 0xdf,
298
					0x43, 0x52, 0xd9, 0x04, 0xcd, 0xeb, 0x79, 0xaa, 0x58,
299
					0x3a, 0xdc, 0xc3, 0x1e, 0xa6, 0x98, 0xa4, 0xc0, 0x52,
300
					0x83, 0xda, 0xba, 0x90, 0x89, 0xbe, 0x54, 0x91, 0xf6,
301
					0x7c, 0x1a, 0x4e, 0xe4, 0x8d, 0xc7, 0x4b, 0xbb, 0xe6,
302
					0x64, 0x3a, 0xef, 0x84, 0x66, 0x79, 0xb4, 0xcb, 0x39,
303
					0x5a, 0x35, 0x2d, 0x5e, 0xd1, 0x15, 0x91, 0x2d, 0xf6,
304
					0x96, 0xff, 0xe0, 0x70, 0x29, 0x32, 0x94, 0x6d, 0x71,
305
					0x49, 0x2b, 0x44,
306
				},
307
			},
308
			// Example 1.3
309
			{
310
				[]byte{0xd9, 0x4a, 0xe0, 0x83, 0x2e, 0x64, 0x45, 0xce,
311
					0x42, 0x33, 0x1c, 0xb0, 0x6d, 0x53, 0x1a, 0x82, 0xb1,
312
					0xdb, 0x4b, 0xaa, 0xd3, 0x0f, 0x74, 0x6d, 0xc9, 0x16,
313
					0xdf, 0x24, 0xd4, 0xe3, 0xc2, 0x45, 0x1f, 0xff, 0x59,
314
					0xa6, 0x42, 0x3e, 0xb0, 0xe1, 0xd0, 0x2d, 0x4f, 0xe6,
315
					0x46, 0xcf, 0x69, 0x9d, 0xfd, 0x81, 0x8c, 0x6e, 0x97,
316
					0xb0, 0x51,
317
				},
318
				[]byte{0x25, 0x14, 0xdf, 0x46, 0x95, 0x75, 0x5a, 0x67,
319
					0xb2, 0x88, 0xea, 0xf4, 0x90, 0x5c, 0x36, 0xee, 0xc6,
320
					0x6f, 0xd2, 0xfd,
321
				},
322
				[]byte{0x42, 0x37, 0x36, 0xed, 0x03, 0x5f, 0x60, 0x26,
323
					0xaf, 0x27, 0x6c, 0x35, 0xc0, 0xb3, 0x74, 0x1b, 0x36,
324
					0x5e, 0x5f, 0x76, 0xca, 0x09, 0x1b, 0x4e, 0x8c, 0x29,
325
					0xe2, 0xf0, 0xbe, 0xfe, 0xe6, 0x03, 0x59, 0x5a, 0xa8,
326
					0x32, 0x2d, 0x60, 0x2d, 0x2e, 0x62, 0x5e, 0x95, 0xeb,
327
					0x81, 0xb2, 0xf1, 0xc9, 0x72, 0x4e, 0x82, 0x2e, 0xca,
328
					0x76, 0xdb, 0x86, 0x18, 0xcf, 0x09, 0xc5, 0x34, 0x35,
329
					0x03, 0xa4, 0x36, 0x08, 0x35, 0xb5, 0x90, 0x3b, 0xc6,
330
					0x37, 0xe3, 0x87, 0x9f, 0xb0, 0x5e, 0x0e, 0xf3, 0x26,
331
					0x85, 0xd5, 0xae, 0xc5, 0x06, 0x7c, 0xd7, 0xcc, 0x96,
332
					0xfe, 0x4b, 0x26, 0x70, 0xb6, 0xea, 0xc3, 0x06, 0x6b,
333
					0x1f, 0xcf, 0x56, 0x86, 0xb6, 0x85, 0x89, 0xaa, 0xfb,
334
					0x7d, 0x62, 0x9b, 0x02, 0xd8, 0xf8, 0x62, 0x5c, 0xa3,
335
					0x83, 0x36, 0x24, 0xd4, 0x80, 0x0f, 0xb0, 0x81, 0xb1,
336
					0xcf, 0x94, 0xeb,
337
				},
338
			},
339
		},
340
	},
341
	// Key 10
342
	{"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb",
343
		65537,
344
		"056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e79",
345
		[]testEncryptOAEPMessage{
346
			// Example 10.1
347
			{
348
				[]byte{0x8b, 0xba, 0x6b, 0xf8, 0x2a, 0x6c, 0x0f, 0x86,
349
					0xd5, 0xf1, 0x75, 0x6e, 0x97, 0x95, 0x68, 0x70, 0xb0,
350
					0x89, 0x53, 0xb0, 0x6b, 0x4e, 0xb2, 0x05, 0xbc, 0x16,
351
					0x94, 0xee,
352
				},
353
				[]byte{0x47, 0xe1, 0xab, 0x71, 0x19, 0xfe, 0xe5, 0x6c,
354
					0x95, 0xee, 0x5e, 0xaa, 0xd8, 0x6f, 0x40, 0xd0, 0xaa,
355
					0x63, 0xbd, 0x33,
356
				},
357
				[]byte{0x53, 0xea, 0x5d, 0xc0, 0x8c, 0xd2, 0x60, 0xfb,
358
					0x3b, 0x85, 0x85, 0x67, 0x28, 0x7f, 0xa9, 0x15, 0x52,
359
					0xc3, 0x0b, 0x2f, 0xeb, 0xfb, 0xa2, 0x13, 0xf0, 0xae,
360
					0x87, 0x70, 0x2d, 0x06, 0x8d, 0x19, 0xba, 0xb0, 0x7f,
361
					0xe5, 0x74, 0x52, 0x3d, 0xfb, 0x42, 0x13, 0x9d, 0x68,
362
					0xc3, 0xc5, 0xaf, 0xee, 0xe0, 0xbf, 0xe4, 0xcb, 0x79,
363
					0x69, 0xcb, 0xf3, 0x82, 0xb8, 0x04, 0xd6, 0xe6, 0x13,
364
					0x96, 0x14, 0x4e, 0x2d, 0x0e, 0x60, 0x74, 0x1f, 0x89,
365
					0x93, 0xc3, 0x01, 0x4b, 0x58, 0xb9, 0xb1, 0x95, 0x7a,
366
					0x8b, 0xab, 0xcd, 0x23, 0xaf, 0x85, 0x4f, 0x4c, 0x35,
367
					0x6f, 0xb1, 0x66, 0x2a, 0xa7, 0x2b, 0xfc, 0xc7, 0xe5,
368
					0x86, 0x55, 0x9d, 0xc4, 0x28, 0x0d, 0x16, 0x0c, 0x12,
369
					0x67, 0x85, 0xa7, 0x23, 0xeb, 0xee, 0xbe, 0xff, 0x71,
370
					0xf1, 0x15, 0x94, 0x44, 0x0a, 0xae, 0xf8, 0x7d, 0x10,
371
					0x79, 0x3a, 0x87, 0x74, 0xa2, 0x39, 0xd4, 0xa0, 0x4c,
372
					0x87, 0xfe, 0x14, 0x67, 0xb9, 0xda, 0xf8, 0x52, 0x08,
373
					0xec, 0x6c, 0x72, 0x55, 0x79, 0x4a, 0x96, 0xcc, 0x29,
374
					0x14, 0x2f, 0x9a, 0x8b, 0xd4, 0x18, 0xe3, 0xc1, 0xfd,
375
					0x67, 0x34, 0x4b, 0x0c, 0xd0, 0x82, 0x9d, 0xf3, 0xb2,
376
					0xbe, 0xc6, 0x02, 0x53, 0x19, 0x62, 0x93, 0xc6, 0xb3,
377
					0x4d, 0x3f, 0x75, 0xd3, 0x2f, 0x21, 0x3d, 0xd4, 0x5c,
378
					0x62, 0x73, 0xd5, 0x05, 0xad, 0xf4, 0xcc, 0xed, 0x10,
379
					0x57, 0xcb, 0x75, 0x8f, 0xc2, 0x6a, 0xee, 0xfa, 0x44,
380
					0x12, 0x55, 0xed, 0x4e, 0x64, 0xc1, 0x99, 0xee, 0x07,
381
					0x5e, 0x7f, 0x16, 0x64, 0x61, 0x82, 0xfd, 0xb4, 0x64,
382
					0x73, 0x9b, 0x68, 0xab, 0x5d, 0xaf, 0xf0, 0xe6, 0x3e,
383
					0x95, 0x52, 0x01, 0x68, 0x24, 0xf0, 0x54, 0xbf, 0x4d,
384
					0x3c, 0x8c, 0x90, 0xa9, 0x7b, 0xb6, 0xb6, 0x55, 0x32,
385
					0x84, 0xeb, 0x42, 0x9f, 0xcc,
386
				},
387
			},
388
		},
389
	},
390
}