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.
		
		
		
		
			
				
					90 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					90 lines
				
				2.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
							 | 
						||
| 
								 | 
							
								// thanks to @Rantanen
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var asn = require('asn1.js')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Time = asn.define('Time', function () {
							 | 
						||
| 
								 | 
							
								  this.choice({
							 | 
						||
| 
								 | 
							
								    utcTime: this.utctime(),
							 | 
						||
| 
								 | 
							
								    generalTime: this.gentime()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('type').objid(),
							 | 
						||
| 
								 | 
							
								    this.key('value').any()
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('algorithm').objid(),
							 | 
						||
| 
								 | 
							
								    this.key('parameters').optional(),
							 | 
						||
| 
								 | 
							
								    this.key('curve').objid().optional()
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('algorithm').use(AlgorithmIdentifier),
							 | 
						||
| 
								 | 
							
								    this.key('subjectPublicKey').bitstr()
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
							 | 
						||
| 
								 | 
							
								  this.setof(AttributeTypeValue)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var RDNSequence = asn.define('RDNSequence', function () {
							 | 
						||
| 
								 | 
							
								  this.seqof(RelativeDistinguishedName)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Name = asn.define('Name', function () {
							 | 
						||
| 
								 | 
							
								  this.choice({
							 | 
						||
| 
								 | 
							
								    rdnSequence: this.use(RDNSequence)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Validity = asn.define('Validity', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('notBefore').use(Time),
							 | 
						||
| 
								 | 
							
								    this.key('notAfter').use(Time)
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Extension = asn.define('Extension', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('extnID').objid(),
							 | 
						||
| 
								 | 
							
								    this.key('critical').bool().def(false),
							 | 
						||
| 
								 | 
							
								    this.key('extnValue').octstr()
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var TBSCertificate = asn.define('TBSCertificate', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('version').explicit(0).int().optional(),
							 | 
						||
| 
								 | 
							
								    this.key('serialNumber').int(),
							 | 
						||
| 
								 | 
							
								    this.key('signature').use(AlgorithmIdentifier),
							 | 
						||
| 
								 | 
							
								    this.key('issuer').use(Name),
							 | 
						||
| 
								 | 
							
								    this.key('validity').use(Validity),
							 | 
						||
| 
								 | 
							
								    this.key('subject').use(Name),
							 | 
						||
| 
								 | 
							
								    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
							 | 
						||
| 
								 | 
							
								    this.key('issuerUniqueID').implicit(1).bitstr().optional(),
							 | 
						||
| 
								 | 
							
								    this.key('subjectUniqueID').implicit(2).bitstr().optional(),
							 | 
						||
| 
								 | 
							
								    this.key('extensions').explicit(3).seqof(Extension).optional()
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var X509Certificate = asn.define('X509Certificate', function () {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('tbsCertificate').use(TBSCertificate),
							 | 
						||
| 
								 | 
							
								    this.key('signatureAlgorithm').use(AlgorithmIdentifier),
							 | 
						||
| 
								 | 
							
								    this.key('signatureValue').bitstr()
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = X509Certificate
							 |