eagre-asn1 0.3.0

A asn1 library, currently only supporting DER
Documentation
[![Build Status](https://travis-ci.org/Rahix/eagre-asn1.svg?branch=master)](https://travis-ci.org/Rahix/eagre-asn1)
eagre-asn1
==========

eagre-asn1 is an asn1 library for [Rust](https://www.rust-lang.org/).

It makes heavy use of macros to make the interface easy to use.

Currently only DER and a very small bit of xer is supported.

## Documentation ##

Documentation can be found at [https://rahix.github.io/eagre-asn1/](https://rahix.github.io/eagre-asn1/)

## Example ##
Say you have the following asn1 structure:  

```
User ::= SEQUENCE {
	username         UTF8String,
	passwordHash     [CONTEXT 12] IMPLICIT OctetString,
	age              [APPLICATION 1] EXPLICIT Integer,
	admin            Boolean
}
```
In Rust it would look like this:  

```rust
struct User {
	pub username: String,
	pub password_hash: Vec<u8>,
	pub age: i32,
	pub admin: bool,
}

der_sequence!{
	User:
		username:      NOTAG                       TYPE String,
		password_hash: IMPLICIT TAG CONTEXT 12;    TYPE Vec<u8>,
		age:           EXPLICIT TAG APPLICATION 1; TYPE i32,
		admin:         NOTAG                       TYPE bool,
}
```
And serializing is as easy as:  

```rust
use eagre_asn1::der::DER;

let some_user = User { ... };
let encoded = some_user.der_bytes().unwrap();
// Send to far away planet
let decoded = User::der_from_bytes(encoded).unwrap();
assert_eq!(some_user, decoded);
```

## Implemented Types ##

- [x] Any `types::Any`
- [ ] BitString `types::BitString`
- [ ] BMPString `types::BMPString`
- [x] Boolean `bool`
- [x] CharacterString `types::CharacterString`
- [x] Choice `enum`
- [ ] Date `types::Date`
- [ ] DateTime `types::DateTime`
- [ ] Duration `std::time::Duration`
- [ ] EmbeddedPDV `types::EmbeddedPDV`
- [x] Enumeration `enum`
- [ ] External
- [x] GeneralString `types::GeneralString`
- [x] GraphicString `types::GraphicString`
- [x] IA5String `types::IA5String`
- [ ] InstanceOf
- [x] Integer `i32`
- [ ] IRI
- [x] Null `types::Null`
- [x] NumericString `types::NumericString`
- [ ] ObjectClassField
- [ ] ObjectIdentifier
- [x] OctetString `Vec<u8>`
- [ ] PrintableString `types::PrintableString`
- [ ] Real `f32`
- [ ] RelativeIRI
- [ ] RelativeOID
- [x] Sequence `struct`
- [x] Sequence Of `Vec<T>`
- [ ] Set `struct`
- [ ] Set Of `types::SetOf`
- [x] T61String `types::T61String`
- [ ] Time `types::Time`
- [ ] TimeOfDay `types::TimeOfDay`
- [x] UniversalString `types::UniversalString`
- [x] UTF8String `String` or `&str`
- [x] VideotexString `types::VideotexString`
- [x] VisibleString `types::VisibleString`

## License ##
eagre-asn1 is licensed under either of

 * Apache License, Version 2.0 ([LICENSE-APACHE]LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT]LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.