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.
		
		
		
		
		
			
		
			
				
					101 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					101 lines
				
				2.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# ASN1.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ASN.1 DER Encoder/Decoder and DSL.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Example
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Define model:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var asn = require('asn1.js');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Human = asn.define('Human', function() {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('firstName').octstr(),
							 | 
						||
| 
								 | 
							
								    this.key('lastName').octstr(),
							 | 
						||
| 
								 | 
							
								    this.key('age').int(),
							 | 
						||
| 
								 | 
							
								    this.key('gender').enum({ 0: 'male', 1: 'female' }),
							 | 
						||
| 
								 | 
							
								    this.key('bio').seqof(Bio)
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Bio = asn.define('Bio', function() {
							 | 
						||
| 
								 | 
							
								  this.seq().obj(
							 | 
						||
| 
								 | 
							
								    this.key('time').gentime(),
							 | 
						||
| 
								 | 
							
								    this.key('description').octstr()
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Encode data:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var output = Human.encode({
							 | 
						||
| 
								 | 
							
								  firstName: 'Thomas',
							 | 
						||
| 
								 | 
							
								  lastName: 'Anderson',
							 | 
						||
| 
								 | 
							
								  age: 28,
							 | 
						||
| 
								 | 
							
								  gender: 'male',
							 | 
						||
| 
								 | 
							
								  bio: [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      time: +new Date('31 March 1999'),
							 | 
						||
| 
								 | 
							
								      description: 'freedom of mind'
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								}, 'der');
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Decode data:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var human = Human.decode(output, 'der');
							 | 
						||
| 
								 | 
							
								console.log(human);
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								{ firstName: <Buffer 54 68 6f 6d 61 73>,
							 | 
						||
| 
								 | 
							
								  lastName: <Buffer 41 6e 64 65 72 73 6f 6e>,
							 | 
						||
| 
								 | 
							
								  age: 28,
							 | 
						||
| 
								 | 
							
								  gender: 'male',
							 | 
						||
| 
								 | 
							
								  bio:
							 | 
						||
| 
								 | 
							
								   [ { time: 922820400000,
							 | 
						||
| 
								 | 
							
								       description: <Buffer 66 72 65 65 64 6f 6d 20 6f 66 20 6d 69 6e 64> } ] }
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Partial decode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Its possible to parse data without stopping on first error. In order to do it,
							 | 
						||
| 
								 | 
							
								you should call:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var human = Human.decode(output, 'der', { partial: true });
							 | 
						||
| 
								 | 
							
								console.log(human);
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								{ result: { ... },
							 | 
						||
| 
								 | 
							
								  errors: [ ... ] }
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### LICENSE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This software is licensed under the MIT License.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright Fedor Indutny, 2017.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Permission is hereby granted, free of charge, to any person obtaining a
							 | 
						||
| 
								 | 
							
								copy of this software and associated documentation files (the
							 | 
						||
| 
								 | 
							
								"Software"), to deal in the Software without restriction, including
							 | 
						||
| 
								 | 
							
								without limitation the rights to use, copy, modify, merge, publish,
							 | 
						||
| 
								 | 
							
								distribute, sublicense, and/or sell copies of the Software, and to permit
							 | 
						||
| 
								 | 
							
								persons to whom the Software is furnished to do so, subject to the
							 | 
						||
| 
								 | 
							
								following conditions:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The above copyright notice and this permission notice shall be included
							 | 
						||
| 
								 | 
							
								in all copies or substantial portions of the Software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
							 | 
						||
| 
								 | 
							
								OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
							 | 
						||
| 
								 | 
							
								MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
							 | 
						||
| 
								 | 
							
								NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
							 | 
						||
| 
								 | 
							
								DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
							 | 
						||
| 
								 | 
							
								OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
							 | 
						||
| 
								 | 
							
								USE OR OTHER DEALINGS IN THE SOFTWARE.
							 |