fix nested parsing bug
This commit is contained in:
		
							parent
							
								
									90b4b26ffb
								
							
						
					
					
						commit
						2b8e6b4c95
					
				
							
								
								
									
										53
									
								
								bin/rasha.js
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								bin/rasha.js
									
									
									
									
									
								
							| @ -21,48 +21,45 @@ function ASN1(buf, depth) { | |||||||
|     throw new Error("We got stuck in a loop (or this is actually more than 15 layers deep, which we never expected)"); |     throw new Error("We got stuck in a loop (or this is actually more than 15 layers deep, which we never expected)"); | ||||||
|   } |   } | ||||||
|   var asn1 = { |   var asn1 = { | ||||||
|     type: buf[0] |     index: 2 // start after type (0) and lengthSize (1)
 | ||||||
|   , length: 0 |   , type: buf[0] | ||||||
|   , lengthLength: buf[1] |   , length: buf[1] | ||||||
|   , totalLength: 0 |   , lengthSize: 0 | ||||||
|   , value: null |   , value: null | ||||||
|   , children: [] |   , children: [] | ||||||
|   }; |   }; | ||||||
|   console.log(depth, buf.byteLength, buf); |   console.log(depth, buf.byteLength, buf); | ||||||
|   var index = 2; |  | ||||||
|   var child; |   var child; | ||||||
|   var i = 0; |   var i = 0; | ||||||
|   if (0x80 & asn1.lengthLength) { |   if (0x80 & asn1.length) { | ||||||
|     asn1.lengthLength = 0x7f & asn1.lengthLength; |     asn1.lengthSize = 0x7f & asn1.length; | ||||||
|     // to not worry about Endianness:
 |     // I think that buf->hex->int solves the problem of Endianness... not sure
 | ||||||
|     console.log('lenlen:', buf.slice(index, index + asn1.lengthLength).toString('hex')); |     console.log('lenlen:', buf.slice(asn1.index, asn1.index + asn1.lengthSize).toString('hex')); | ||||||
|     asn1.length = parseInt(buf.slice(index, index + asn1.lengthLength).toString('hex'), 16); |     asn1.length = parseInt(buf.slice(asn1.index, asn1.index + asn1.lengthSize).toString('hex'), 16); | ||||||
|     index += asn1.lengthLength; |     // add back the original byte indicating lengthSize
 | ||||||
|   } else { |     //asn1.lengthSize += 1;
 | ||||||
|     asn1.length = asn1.lengthLength; |     //asn1.index += asn1.lengthSize;
 | ||||||
|     asn1.lengthLength = 0; |     asn1.index += 1; | ||||||
|   } |   } | ||||||
|   asn1.totalLength += asn1.lengthLength + 1; | 
 | ||||||
|   console.log('asn1:' |   console.log('asn1', 'type', Buffer.from([asn1.type]).toString('hex') | ||||||
|     , Buffer.from([asn1.type]).toString('hex') |     , 'ls', Buffer.from([asn1.lengthSize]).toString('hex'), 'len', asn1.length | ||||||
|     , Buffer.from([asn1.totalLength]) |     , 'ch', asn1.children.length, 'vlen', asn1.value && asn1.value.length || null); | ||||||
|     , asn1.length |  | ||||||
|     , asn1.type <= 0x06 |  | ||||||
|   ); |  | ||||||
| 
 | 
 | ||||||
|   // this is a primitive value type
 |   // this is a primitive value type
 | ||||||
|   if (asn1.type <= 0x06) { |   if (asn1.type <= 0x06) { | ||||||
|     i += 1; |     i += 1; | ||||||
|     asn1.value = buf.slice(index, index + asn1.length); |     asn1.value = buf.slice(asn1.index, asn1.index + asn1.length); | ||||||
|     console.log("type is less than or equal to 0x06 and value size is", asn1.value.byteLength |  | ||||||
|       , Buffer.from(asn1.value.slice(asn1.value.byteLength - 3)).toString('hex')); |  | ||||||
|     return asn1; |     return asn1; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   while (i < 12 && index < buf.byteLength) { |   while (i < 12 && asn1.index < buf.byteLength) { | ||||||
|     child = ASN1(buf.slice(index), depth += 1); |     var childbuf = buf.slice(asn1.index); | ||||||
|     index += 1 /*child.type.length*/ + child.totalLength + child.length; |     child = ASN1(childbuf, depth += 1); | ||||||
|     console.log("New Index is:", index, "New buf.byteLength:", buf.byteLength); |     console.log('child', 'type', Buffer.from([child.type]).toString('hex') | ||||||
|  |       , 'ls', Buffer.from([child.lengthSize]).toString('hex'), 'len', child.length | ||||||
|  |       , 'ch', child.children.length, 'vlen', child.value && child.value.length || null); | ||||||
|  |     asn1.index += 2 /*child.type.length*/ + child.lengthSize + child.length; | ||||||
|     asn1.children.push(child); |     asn1.children.push(child); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user