202 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			202 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var X509 = require('../'); | ||
|  | var PEM = require('@root/pem'); | ||
|  | 
 | ||
|  | var ec = { | ||
|  | 	crv: 'P-256', | ||
|  | 	d: 'LImWxqqTHbP3LHQfqscDSUzf_uNePGqf9U6ETEcO5Ho', | ||
|  | 	kty: 'EC', | ||
|  | 	x: 'vdjQ3T6VBX82LIKDzepYgRsz3HgRwp83yPuonu6vqos', | ||
|  | 	y: 'IUkEXtAMnppnV1A19sE2bJhUo4WPbq6EYgWxma4oGyg', | ||
|  | 	kid: 'MnfJYyS9W5gUjrJLdn8ePMzik8ZJz2qc-VZmKOs_oCw' | ||
|  | }; | ||
|  | var ecPub = { | ||
|  | 	crv: 'P-256', | ||
|  | 	kty: 'EC', | ||
|  | 	x: 'vdjQ3T6VBX82LIKDzepYgRsz3HgRwp83yPuonu6vqos', | ||
|  | 	y: 'IUkEXtAMnppnV1A19sE2bJhUo4WPbq6EYgWxma4oGyg', | ||
|  | 	kid: 'MnfJYyS9W5gUjrJLdn8ePMzik8ZJz2qc-VZmKOs_oCw' | ||
|  | }; | ||
|  | 
 | ||
|  | var rsa = { | ||
|  | 	alg: 'RS256', | ||
|  | 	d: | ||
|  | 		'ETFW_Kx2yUf9DHZaYkYinydcgURY1DA1umkcAwcVVGA7PQtEFXp4Z7EhhA9KZb7CxX0SFALh5PLZLesmkm3oBVonlGeS2kArNHEIAzzGQQzalTjPwfYtIxKsLDUxad05XL0MmGPKAKK8kgLq75EWzvRqkSd2tpfPRzWhu4tOEaaN3zrCklUIG6wueDgxZ0lq3zPzbabKUPzHtKrD_K2CmAs1e0Uh31IwUdAVFeV0cznr6_g2mK-bplSa8pX0nfWKA9J33U43y_XqWINslofBNKqI4XSdTizydGG5K8OTr15LZ8dZzkyE24SwzL5TdwXU084hdxGy2Q2k3Hpe3FatVQ', | ||
|  | 	dp: | ||
|  | 		'pJ6Vhwkwgb5otzqlM0nPBwuSconUxAScT7xFpcPVR1PnV0f8tFVOYIgdBRbMwsP2bsSkt0bzpHPwMlPgbqDSDPGnMOV0ORyp8rDS3FdjusLSh74448dWRGf-jV9SiKQQV26-wosXASEHVE-DvkXL97oZ3s4hKDlnZBcTtFl50Ik', | ||
|  | 	dq: | ||
|  | 		'evjNO5Tt1RYad3BoYvQyOsIUpXemEO4ehLwya5OR5a5Bn65ebQOqlCa946AAoifIzHJxIFYohfIpptrzdCSAlJA2Hi_ZxRcMzsi_k9mLLKQA7xZSblwuDzk5G7OrwdqC05YUYH-LmH7QklgLsg7CP-BmSb2_hTKVCghImY6SPQk', | ||
|  | 	e: 'AQAB', | ||
|  | 	ext: true, | ||
|  | 	key_ops: ['sign'], | ||
|  | 	kty: 'RSA', | ||
|  | 	n: | ||
|  | 		'uQ5a9uJ-UBCUWlQ67lo-o0e0F_WTsbbcETtE8trAuz-2jzRh9BqGfKoJqEP2quXGeOSfBEbB4d02nem3RBR-plC-fHrdluj31mK4GrCA5t9OJ2Q5K9xEH3vHkicFy0gbE0NmuSkFSLHmZ7lSD2kTOhAP3_aTjvaxMsv6ShA76XRuwhRwbUj931eOdsBzDBkmqeotu9eNQnUeq9qJsJDp8EgPaKUcKjz3yb8hCWo5LNIpuTLAV9nxNVRCo64WAotY6FSWO_Tb_pfy8YiN0nnFNg_0K2aU9BaRvb0EISA7KTq4IZzXPZGLwPopwmH8I4GB9IF3k0_ohjJBLiAaokkmUQ', | ||
|  | 	p: | ||
|  | 		'42hRRgBoWqXjY1wR5131O-vOIVPcoiX37ephSoyYOqwgkPTJcpG62p5kwwNCJ0QB9RLJS1aJRcpYVcEu4js1kiJy_jkIGN6t_LZquASThLP0cdbiqsEVCE-0e-zgN4zf-h_IqjkvXilWGJQGa5AIcpoZPKQVUPy00b9ao9SxLKU', | ||
|  | 	q: | ||
|  | 		'0FLZ2MKPc6G2bMhEa2QF3otpOgKJuYoTGnlo_WfqdksW5U4xEga_PbjxXWI-TAy5lFEjtmj1FP6v5Y-ZZeutGsCwfPnEIdVewoIjym7f1ztDL9a3s_hn8R6PrsUq-718kPP-7or3MvunH31VXWn5B4xQ57AfkjfkV-n-qYglBz0', | ||
|  | 	qi: | ||
|  | 		'XFSbj_yuhDgDzgIi4uPbCIhIOj9H5gbYv7gDPWsNJEavcZ1gImOrIfFHunOekWuUHl6C_5ARNLf0cGUBJy9Mqj0QSr7L8R04YQUHg4Z9aJ-ISY6Yd_0BdVU1TwtXg0MiClrJQe7KFachIEa7XJO27D6xb0ubI6ZzB1V9VrmmmWY', | ||
|  | 	kid: 'MKyL9gVM1vW-dmDkvgyzZxeQr6OlEVj_uX6v0Owe0BQ' | ||
|  | }; | ||
|  | var rsaPub = { | ||
|  | 	alg: 'RS256', | ||
|  | 	e: 'AQAB', | ||
|  | 	ext: true, | ||
|  | 	key_ops: ['sign'], | ||
|  | 	kty: 'RSA', | ||
|  | 	n: | ||
|  | 		'uQ5a9uJ-UBCUWlQ67lo-o0e0F_WTsbbcETtE8trAuz-2jzRh9BqGfKoJqEP2quXGeOSfBEbB4d02nem3RBR-plC-fHrdluj31mK4GrCA5t9OJ2Q5K9xEH3vHkicFy0gbE0NmuSkFSLHmZ7lSD2kTOhAP3_aTjvaxMsv6ShA76XRuwhRwbUj931eOdsBzDBkmqeotu9eNQnUeq9qJsJDp8EgPaKUcKjz3yb8hCWo5LNIpuTLAV9nxNVRCo64WAotY6FSWO_Tb_pfy8YiN0nnFNg_0K2aU9BaRvb0EISA7KTq4IZzXPZGLwPopwmH8I4GB9IF3k0_ohjJBLiAaokkmUQ', | ||
|  | 	kid: 'MKyL9gVM1vW-dmDkvgyzZxeQr6OlEVj_uX6v0Owe0BQ' | ||
|  | }; | ||
|  | 
 | ||
|  | function log(pem) { | ||
|  | 	//console.log(pem);
 | ||
|  | } | ||
|  | 
 | ||
|  | var rsaPrivPkcs1 = PEM.packBlock({ | ||
|  | 	type: 'RSA PRIVATE KEY', | ||
|  | 	bytes: X509.packPkcs1(rsa) | ||
|  | }); | ||
|  | log(rsaPrivPkcs1); | ||
|  | 
 | ||
|  | var rsaPubPkcs1 = PEM.packBlock({ | ||
|  | 	type: 'RSA PUBLIC KEY', | ||
|  | 	bytes: X509.packPkcs1(rsaPub) | ||
|  | }); | ||
|  | log(rsaPubPkcs1); | ||
|  | 
 | ||
|  | var ecPrivSec1 = PEM.packBlock({ | ||
|  | 	type: 'EC PRIVATE KEY', | ||
|  | 	bytes: X509.packSec1(ec) | ||
|  | }); | ||
|  | log(ecPrivSec1); | ||
|  | 
 | ||
|  | var rsaPrivPkcs8 = PEM.packBlock({ | ||
|  | 	type: 'PRIVATE KEY (RSA)', | ||
|  | 	bytes: X509.packPkcs8(rsa) | ||
|  | }); | ||
|  | log(rsaPrivPkcs8); | ||
|  | 
 | ||
|  | var ecPrivPkcs8 = PEM.packBlock({ | ||
|  | 	type: 'PRIVATE KEY (EC)', | ||
|  | 	bytes: X509.packPkcs8(ec) | ||
|  | }); | ||
|  | log(ecPrivPkcs8); | ||
|  | 
 | ||
|  | var rsaPubSpki = PEM.packBlock({ | ||
|  | 	type: 'PUBLIC KEY (RSA)', | ||
|  | 	bytes: X509.packSpki(rsaPub) | ||
|  | }); | ||
|  | log(rsaPubSpki); | ||
|  | 
 | ||
|  | var ecPubSpki = PEM.packBlock({ | ||
|  | 	type: 'PUBLIC KEY (EC)', | ||
|  | 	bytes: X509.packSpki(ecPub) | ||
|  | }); | ||
|  | log(ecPubSpki); | ||
|  | 
 | ||
|  | var rsaPubCsr = PEM.packBlock({ | ||
|  | 	type: '(CSR-Embeddable) PUBLIC KEY (RSA)', | ||
|  | 	bytes: X509.packCsrRsaPublicKey(rsaPub) | ||
|  | }); | ||
|  | log(rsaPubCsr); | ||
|  | 
 | ||
|  | var ecPubCsr = ecPubCsr; | ||
|  | log( | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: '(CSR-Embeddable) PUBLIC KEY (EC)', | ||
|  | 		bytes: X509.packCsrEcPublicKey(ecPub) | ||
|  | 	}) | ||
|  | ); | ||
|  | 
 | ||
|  | console.info('PASS: Packed all possible formats'); | ||
|  | 
 | ||
|  | if ( | ||
|  | 	rsaPrivPkcs1 !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'RSA PRIVATE KEY', | ||
|  | 		bytes: X509.packPkcs1( | ||
|  | 			X509.parsePkcs1(PEM.parseBlock(rsaPrivPkcs1).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('Fail packPrivPkcs1 Private'); | ||
|  | } | ||
|  | 
 | ||
|  | if ( | ||
|  | 	rsaPubPkcs1 !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'RSA PUBLIC KEY', | ||
|  | 		bytes: X509.packPkcs1( | ||
|  | 			X509.parsePkcs1(PEM.parseBlock(rsaPubPkcs1).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('Fail packPubPkcs1 Private'); | ||
|  | } | ||
|  | 
 | ||
|  | if ( | ||
|  | 	ecPrivSec1 !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'EC PRIVATE KEY', | ||
|  | 		bytes: X509.packSec1( | ||
|  | 			X509.parseSec1(PEM.parseBlock(ecPrivSec1).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('FAIL packSec1'); | ||
|  | } | ||
|  | 
 | ||
|  | if ( | ||
|  | 	rsaPrivPkcs8 !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'PRIVATE KEY (RSA)', | ||
|  | 		bytes: X509.packPkcs8( | ||
|  | 			X509.parsePkcs8(PEM.parseBlock(rsaPrivPkcs8).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('FAIL packRsaPrivPkcs8'); | ||
|  | } | ||
|  | 
 | ||
|  | if ( | ||
|  | 	ecPrivPkcs8 !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'PRIVATE KEY (EC)', | ||
|  | 		bytes: X509.packPkcs8( | ||
|  | 			X509.parsePkcs8(PEM.parseBlock(ecPrivPkcs8).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('FAIL packEcPrivPkcs8'); | ||
|  | } | ||
|  | 
 | ||
|  | if ( | ||
|  | 	rsaPubSpki !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'PUBLIC KEY (RSA)', | ||
|  | 		bytes: X509.packSpki( | ||
|  | 			X509.parseSpki(PEM.parseBlock(rsaPubSpki).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('FAIL packRsaPubSpki'); | ||
|  | } | ||
|  | 
 | ||
|  | if ( | ||
|  | 	ecPubSpki !== | ||
|  | 	PEM.packBlock({ | ||
|  | 		type: 'PUBLIC KEY (EC)', | ||
|  | 		bytes: X509.packSpki( | ||
|  | 			X509.parseSpki(PEM.parseBlock(ecPubSpki).bytes, {}) | ||
|  | 		) | ||
|  | 	}) | ||
|  | ) { | ||
|  | 	throw new Error('FAIL packEcPubSpki'); | ||
|  | } | ||
|  | 
 | ||
|  | console.info('PASS: Parsed all possible formats'); |