Cryptosystem.go 1004 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package types
  2. import (
  3. "github.com/jcmturner/asn1"
  4. )
  5. // Reference: https://www.ietf.org/rfc/rfc4120.txt
  6. // Section: 5.2.9
  7. // Reference: https://www.ietf.org/rfc/rfc3961.txt
  8. type EncryptedData struct {
  9. EType int `asn1:"explicit,tag:0"`
  10. KVNO int `asn1:"explicit,optional,tag:1"`
  11. Cipher []byte `asn1:"explicit,tag:2"`
  12. }
  13. //AKA KeyBlock
  14. type EncryptionKey struct {
  15. KeyType int `asn1:"explicit,tag:0"`
  16. KeyValue []byte `asn1:"explicit,tag:1"`
  17. }
  18. type Checksum struct {
  19. CksumType int `asn1:"explicit,tag:0"`
  20. Checksum []byte `asn1:"explicit,tag:1"`
  21. }
  22. func (a *EncryptedData) Unmarshal(b []byte) error {
  23. _, err := asn1.Unmarshal(b, a)
  24. return err
  25. }
  26. func (a *EncryptedData) Marshal() ([]byte, error) {
  27. edb, err := asn1.Marshal(*a)
  28. if err != nil {
  29. return edb, err
  30. }
  31. return edb, nil
  32. }
  33. func (a *EncryptionKey) Unmarshal(b []byte) error {
  34. _, err := asn1.Unmarshal(b, a)
  35. return err
  36. }
  37. func (a *Checksum) Unmarshal(b []byte) error {
  38. _, err := asn1.Unmarshal(b, a)
  39. return err
  40. }