...

Source file src/crypto/rsa/rsa_test.go

Documentation: crypto/rsa

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

View as plain text