[Cryptography Team] the new Type-based ASN1 Stream implementation

Ron Teitelbaum Ron at USMedRec.com
Mon Mar 26 15:56:59 UTC 2007


Hi Rob,

This is terrific news!!  Great job!  I'll review it and start working with
it right away!

Thanks,

Ron Teitelbaum



> From: Robert Withers
> 
> With inspiration from VW, I've implemented a new ASN1 Stream and
> associated Type hierarchy.  I briefly explain the new system below.
> This has been published alongside the existing ASN1Value
> implementation, in the Cryptography repository, so that users of
> ASN1Value won't currently be impacted.  However, I would like to
> deprecate the old implementation this week, so this is a call to port
> uses of ASN1Value to ASN1DERStream.  Please contact me if you are a
> user and I will help you port your code.  I will be porting the X509
> Certificate implementation over the next few days, so users of this
> framework should also contact me, as the public api will change.
> 
> The new ASN1 framework has a Type hierarchy that supports both basic
> types and user-defined types.
> 
> The support for basic types is sufficient to replace the current
> ASN1Value impl.  Below are the replacements.
> 
> 	ASN1Value fromAsnDer: stream.
> becomes
> 	(ASN1DERStream onStream: stream) decode.
> 
> and
> 
> 	anASN1Value encodeAsnDer
> becomes
> 	ASN1DERStream new encode: anASN1Value.
> 
> The user-defined types are stored in an instance of an ASN1Module,
> for each module defined in the image.  For instance, the X509 Module
> is registered as #x509.  To access the forthcoming Certificate type
> definition in the X509 Module (I have to port X509 first), you would
> write:
> 
> 	type := (ASN1Module name: #x509) find: #Certificate.
> 
> In defining a type, you can specify a base type with an new name, or
> you can specify sequences and other constructs.  With sequences, you
> can add a mapping class, so the elements of the sequence will be set
> to various ivars.  You can add elements with optional, default or
> explicit and implicit tagging.  Here is a sample of a user-defined
> type, a sequence, mapped to an ASN1TestModel, and a Boolean element
> mapped to the #testSlot1 ivar:
> 
> 	((ASN1Module name: #test) sequence: #TestSequence)
> 		add: #testSlot1 type: #ASN1BooleanType;
> 		mapping: ASN1TestModel;
> 		yourself.
> 
> Now you can encode and decode using the defined Type, and this will
> marshal all values into ivars defined on various mapping classes.
> Here is the corresponding code:
> 
> 	type := (ASN1Module name: #test) find: #TestSequence.
> 	obj := (ASN1DERStream onBytes: bytes) decodeWithType: type.
> 
> and
> 
> 	type := (ASN1Module name: #test) find: #TestSequence.
> 	bytes := ASN1DERStream new encode: obj withType: type.
> 
> Additional examples, especially of the variety of basic types and
> user-defined type specifications, can be found in the CryptoASN1Test,
> once you have loaded the latest Cryptography-ASN1 and Cryptography-
> Tests.
> 
> enjoy!
> 
> _______________________________________________
> Cryptography mailing list
> Cryptography at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/cryptography




More information about the Cryptography mailing list