| 
									
										
										
										
											2018-11-22 04:32:33 -07:00
										 |  |  | #!/bin/bash
 | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | set -e | 
					
						
							| 
									
										
										
										
											2018-11-22 04:32:33 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  | pemtojwk() { | 
					
						
							|  |  |  | 	keyid=$1 | 
					
						
							|  |  |  |   if [ -z "$keyid" ]; then | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "Testing PEM-to-JWK PKCS#1" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/privkey-rsa-2048.pkcs1.${keyid}pem \
 | 
					
						
							|  |  |  |     > ./fixtures/privkey-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | 	diff ./fixtures/privkey-rsa-2048.jwk.${keyid}json ./fixtures/privkey-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/pub-rsa-2048.pkcs1.${keyid}pem \
 | 
					
						
							|  |  |  |     > ./fixtures/pub-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | 	diff ./fixtures/pub-rsa-2048.jwk.${keyid}json ./fixtures/pub-rsa-2048.jwk.1.json | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  |   if [ -z "$keyid" ]; then | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "Testing PEM-to-JWK PKCS#8" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/privkey-rsa-2048.pkcs8.${keyid}pem \
 | 
					
						
							|  |  |  |     > ./fixtures/privkey-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | 	diff ./fixtures/privkey-rsa-2048.jwk.${keyid}json ./fixtures/privkey-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/pub-rsa-2048.spki.${keyid}pem \
 | 
					
						
							|  |  |  |     > ./fixtures/pub-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | 	diff ./fixtures/pub-rsa-2048.jwk.${keyid}json ./fixtures/pub-rsa-2048.jwk.1.json | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  | jwktopem() { | 
					
						
							|  |  |  | 	keyid=$1 | 
					
						
							|  |  |  |   if [ -z "$keyid" ]; then | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "Testing JWK-to-PEM PKCS#1" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/privkey-rsa-2048.jwk.${keyid}json pkcs1 \
 | 
					
						
							|  |  |  |     > ./fixtures/privkey-rsa-2048.pkcs1.1.pem | 
					
						
							|  |  |  | 	diff ./fixtures/privkey-rsa-2048.pkcs1.${keyid}pem ./fixtures/privkey-rsa-2048.pkcs1.1.pem | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/pub-rsa-2048.jwk.${keyid}json pkcs1 \
 | 
					
						
							|  |  |  |     > ./fixtures/pub-rsa-2048.pkcs1.1.pem | 
					
						
							|  |  |  | 	diff ./fixtures/pub-rsa-2048.pkcs1.${keyid}pem ./fixtures/pub-rsa-2048.pkcs1.1.pem | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  |   if [ -z "$keyid" ]; then | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "Testing JWK-to-PEM PKCS#8" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/privkey-rsa-2048.jwk.${keyid}json pkcs8 \
 | 
					
						
							|  |  |  |     > ./fixtures/privkey-rsa-2048.pkcs8.1.pem | 
					
						
							|  |  |  | 	diff ./fixtures/privkey-rsa-2048.pkcs8.${keyid}pem ./fixtures/privkey-rsa-2048.pkcs8.1.pem | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/pub-rsa-2048.jwk.${keyid}json spki \
 | 
					
						
							|  |  |  |     > ./fixtures/pub-rsa-2048.spki.1.pem | 
					
						
							|  |  |  | 	diff ./fixtures/pub-rsa-2048.spki.${keyid}pem ./fixtures/pub-rsa-2048.spki.1.pem | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if [ -z "$keyid" ]; then | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |     echo "Testing JWK-to-SSH" | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/privkey-rsa-2048.jwk.${keyid}json ssh > ./fixtures/pub-rsa-2048.ssh.1.pub | 
					
						
							|  |  |  | 	diff ./fixtures/pub-rsa-2048.ssh.${keyid}pub ./fixtures/pub-rsa-2048.ssh.1.pub | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/pub-rsa-2048.jwk.${keyid}json ssh > ./fixtures/pub-rsa-2048.ssh.1.pub | 
					
						
							|  |  |  | 	diff ./fixtures/pub-rsa-2048.ssh.${keyid}pub ./fixtures/pub-rsa-2048.ssh.1.pub | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rndkey() { | 
					
						
							|  |  |  | 	keyid="rnd.1." | 
					
						
							|  |  |  |   keysize=$1 | 
					
						
							|  |  |  | 	# Generate 2048-bit RSA Keypair | 
					
						
							|  |  |  | 	openssl genrsa -out fixtures/privkey-rsa-2048.pkcs1.${keyid}pem $keysize | 
					
						
							|  |  |  | 	# Convert PKCS1 (traditional) RSA Keypair to PKCS8 format | 
					
						
							|  |  |  | 	openssl rsa -in fixtures/privkey-rsa-2048.pkcs1.${keyid}pem -pubout \
 | 
					
						
							|  |  |  |     -out fixtures/pub-rsa-2048.spki.${keyid}pem | 
					
						
							|  |  |  | 	# Export Public-only RSA Key in PKCS1 (traditional) format | 
					
						
							|  |  |  | 	openssl pkcs8 -topk8 -nocrypt -in fixtures/privkey-rsa-2048.pkcs1.${keyid}pem \
 | 
					
						
							|  |  |  |     -out fixtures/privkey-rsa-2048.pkcs8.${keyid}pem | 
					
						
							|  |  |  | 	# Convert PKCS1 (traditional) RSA Public Key to SPKI/PKIX format | 
					
						
							|  |  |  | 	openssl rsa -in fixtures/pub-rsa-2048.spki.${keyid}pem -pubin -RSAPublicKey_out \
 | 
					
						
							|  |  |  |     -out fixtures/pub-rsa-2048.pkcs1.${keyid}pem | 
					
						
							|  |  |  | 	# Convert RSA public key to SSH format | 
					
						
							|  |  |  |   sshpub=$(ssh-keygen -f fixtures/pub-rsa-2048.spki.${keyid}pem -i -mPKCS8) | 
					
						
							|  |  |  |   echo "$sshpub rsa@localhost" > fixtures/pub-rsa-2048.ssh.${keyid}pub | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  |   # to JWK | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/privkey-rsa-2048.pkcs1.${keyid}pem \
 | 
					
						
							|  |  |  |     > ./fixtures/privkey-rsa-2048.jwk.${keyid}json | 
					
						
							|  |  |  | 	node bin/rasha.js ./fixtures/pub-rsa-2048.pkcs1.${keyid}pem \
 | 
					
						
							|  |  |  |     > ./fixtures/pub-rsa-2048.jwk.${keyid}json | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   pemtojwk "$keyid" | 
					
						
							|  |  |  |   jwktopem "$keyid" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | pemtojwk "" | 
					
						
							|  |  |  | jwktopem "" | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "" | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  | echo "Testing different size random keys" | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | echo "" | 
					
						
							| 
									
										
										
										
											2018-11-23 11:22:15 -07:00
										 |  |  | rndkey 32 # minimum key size | 
					
						
							|  |  |  | rndkey 64 | 
					
						
							|  |  |  | rndkey 128 | 
					
						
							|  |  |  | rndkey 256 | 
					
						
							|  |  |  | rndkey 512 | 
					
						
							|  |  |  | rndkey 768 | 
					
						
							|  |  |  | rndkey 1024 | 
					
						
							|  |  |  | rndkey 2048 # first secure key size | 
					
						
							|  |  |  | rndkey 3072 | 
					
						
							|  |  |  | rndkey 4096 # largest reasonable key size | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "Note:" | 
					
						
							|  |  |  | echo "Keys larger than 4096 work as well, but they take minutes to generate, so we stop here." | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-22 21:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | rm fixtures/*.1.* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "PASSED:" | 
					
						
							|  |  |  | echo "• All inputs produced valid outputs" | 
					
						
							|  |  |  | echo "• All outputs matched known-good values" | 
					
						
							|  |  |  | echo "" |