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');
 |