You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					92 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					92 lines
				
				2.2 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2019 Digital Bazaar, Inc.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var forge = require('./forge');
							 | 
						||
| 
								 | 
							
								require('./asn1');
							 | 
						||
| 
								 | 
							
								var asn1 = forge.asn1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.privateKeyValidator = {
							 | 
						||
| 
								 | 
							
								  // PrivateKeyInfo
							 | 
						||
| 
								 | 
							
								  name: 'PrivateKeyInfo',
							 | 
						||
| 
								 | 
							
								  tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								  type: asn1.Type.SEQUENCE,
							 | 
						||
| 
								 | 
							
								  constructed: true,
							 | 
						||
| 
								 | 
							
								  value: [{
							 | 
						||
| 
								 | 
							
								    // Version (INTEGER)
							 | 
						||
| 
								 | 
							
								    name: 'PrivateKeyInfo.version',
							 | 
						||
| 
								 | 
							
								    tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								    type: asn1.Type.INTEGER,
							 | 
						||
| 
								 | 
							
								    constructed: false,
							 | 
						||
| 
								 | 
							
								    capture: 'privateKeyVersion'
							 | 
						||
| 
								 | 
							
								  }, {
							 | 
						||
| 
								 | 
							
								    // privateKeyAlgorithm
							 | 
						||
| 
								 | 
							
								    name: 'PrivateKeyInfo.privateKeyAlgorithm',
							 | 
						||
| 
								 | 
							
								    tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								    type: asn1.Type.SEQUENCE,
							 | 
						||
| 
								 | 
							
								    constructed: true,
							 | 
						||
| 
								 | 
							
								    value: [{
							 | 
						||
| 
								 | 
							
								      name: 'AlgorithmIdentifier.algorithm',
							 | 
						||
| 
								 | 
							
								      tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								      type: asn1.Type.OID,
							 | 
						||
| 
								 | 
							
								      constructed: false,
							 | 
						||
| 
								 | 
							
								      capture: 'privateKeyOid'
							 | 
						||
| 
								 | 
							
								    }]
							 | 
						||
| 
								 | 
							
								  }, {
							 | 
						||
| 
								 | 
							
								    // PrivateKey
							 | 
						||
| 
								 | 
							
								    name: 'PrivateKeyInfo',
							 | 
						||
| 
								 | 
							
								    tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								    type: asn1.Type.OCTETSTRING,
							 | 
						||
| 
								 | 
							
								    constructed: false,
							 | 
						||
| 
								 | 
							
								    capture: 'privateKey'
							 | 
						||
| 
								 | 
							
								  }]
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.publicKeyValidator = {
							 | 
						||
| 
								 | 
							
								  name: 'SubjectPublicKeyInfo',
							 | 
						||
| 
								 | 
							
								  tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								  type: asn1.Type.SEQUENCE,
							 | 
						||
| 
								 | 
							
								  constructed: true,
							 | 
						||
| 
								 | 
							
								  captureAsn1: 'subjectPublicKeyInfo',
							 | 
						||
| 
								 | 
							
								  value: [{
							 | 
						||
| 
								 | 
							
								    name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',
							 | 
						||
| 
								 | 
							
								    tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								    type: asn1.Type.SEQUENCE,
							 | 
						||
| 
								 | 
							
								    constructed: true,
							 | 
						||
| 
								 | 
							
								    value: [{
							 | 
						||
| 
								 | 
							
								      name: 'AlgorithmIdentifier.algorithm',
							 | 
						||
| 
								 | 
							
								      tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								      type: asn1.Type.OID,
							 | 
						||
| 
								 | 
							
								      constructed: false,
							 | 
						||
| 
								 | 
							
								      capture: 'publicKeyOid'
							 | 
						||
| 
								 | 
							
								    }]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  // capture group for ed25519PublicKey
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								    type: asn1.Type.BITSTRING,
							 | 
						||
| 
								 | 
							
								    constructed: false,
							 | 
						||
| 
								 | 
							
								    composed: true,
							 | 
						||
| 
								 | 
							
								    captureBitStringValue: 'ed25519PublicKey'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  // FIXME: this is capture group for rsaPublicKey, use it in this API or
							 | 
						||
| 
								 | 
							
								  // discard?
							 | 
						||
| 
								 | 
							
								  /* {
							 | 
						||
| 
								 | 
							
								    // subjectPublicKey
							 | 
						||
| 
								 | 
							
								    name: 'SubjectPublicKeyInfo.subjectPublicKey',
							 | 
						||
| 
								 | 
							
								    tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								    type: asn1.Type.BITSTRING,
							 | 
						||
| 
								 | 
							
								    constructed: false,
							 | 
						||
| 
								 | 
							
								    value: [{
							 | 
						||
| 
								 | 
							
								      // RSAPublicKey
							 | 
						||
| 
								 | 
							
								      name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',
							 | 
						||
| 
								 | 
							
								      tagClass: asn1.Class.UNIVERSAL,
							 | 
						||
| 
								 | 
							
								      type: asn1.Type.SEQUENCE,
							 | 
						||
| 
								 | 
							
								      constructed: true,
							 | 
						||
| 
								 | 
							
								      optional: true,
							 | 
						||
| 
								 | 
							
								      captureAsn1: 'rsaPublicKey'
							 | 
						||
| 
								 | 
							
								    }]
							 | 
						||
| 
								 | 
							
								  } */
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								};
							 |