mirror of
https://github.com/gregtwallace/apc-p15-tool.git
synced 2025-06-08 12:56:52 +00:00
app: restructure and start building p15 output
This commit is contained in:
parent
6610c92058
commit
e2e4f2037c
24 changed files with 622 additions and 168 deletions
27
pkg/tools/asn1obj/bitstring.go
Normal file
27
pkg/tools/asn1obj/bitstring.go
Normal file
|
@ -0,0 +1,27 @@
|
|||
package asn1obj
|
||||
|
||||
import (
|
||||
"encoding/asn1"
|
||||
"math/bits"
|
||||
)
|
||||
|
||||
// BitString returns a BIT STRING of the content
|
||||
func BitString(content []byte) []byte {
|
||||
bs := asn1.BitString{
|
||||
Bytes: content,
|
||||
}
|
||||
|
||||
// drop trailing 0s by removing them from overall length
|
||||
if len(content) > 0 {
|
||||
trailing0s := bits.TrailingZeros8(content[len(content)-1])
|
||||
bs.BitLength = 8*len(content) - trailing0s
|
||||
}
|
||||
|
||||
// should never error
|
||||
asn1result, err := asn1.Marshal(bs)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
17
pkg/tools/asn1obj/integer.go
Normal file
17
pkg/tools/asn1obj/integer.go
Normal file
|
@ -0,0 +1,17 @@
|
|||
package asn1obj
|
||||
|
||||
import (
|
||||
"encoding/asn1"
|
||||
"math/big"
|
||||
)
|
||||
|
||||
// Integer returns an ASN.1 OBJECT IDENTIFIER with the oidValue bytes
|
||||
func Integer(bigInt *big.Int) []byte {
|
||||
// should never error
|
||||
asn1result, err := asn1.Marshal(bigInt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
27
pkg/tools/asn1obj/misc.go
Normal file
27
pkg/tools/asn1obj/misc.go
Normal file
|
@ -0,0 +1,27 @@
|
|||
package asn1obj
|
||||
|
||||
import "encoding/asn1"
|
||||
|
||||
// Explicit wraps another ASN.1 Object with the EXPLICIT wrapper using
|
||||
// the tag number specified
|
||||
func Explicit(explicitTagNumber int, wrappedElement []byte) []byte {
|
||||
raw := asn1.RawValue{
|
||||
Class: asn1.ClassContextSpecific,
|
||||
Tag: explicitTagNumber,
|
||||
IsCompound: true,
|
||||
Bytes: wrappedElement,
|
||||
}
|
||||
|
||||
// should never error
|
||||
asn1result, err := asn1.Marshal(raw)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
||||
|
||||
// Null returns the NULL value
|
||||
func Null() []byte {
|
||||
return asn1.NullBytes
|
||||
}
|
23
pkg/tools/asn1obj/octetstring.go
Normal file
23
pkg/tools/asn1obj/octetstring.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
package asn1obj
|
||||
|
||||
import (
|
||||
"encoding/asn1"
|
||||
)
|
||||
|
||||
// OctetString returns an OCTET STRING of the content
|
||||
func OctetString(content []byte) []byte {
|
||||
raw := asn1.RawValue{
|
||||
Class: asn1.ClassUniversal,
|
||||
Tag: asn1.TagOctetString,
|
||||
IsCompound: false,
|
||||
Bytes: content,
|
||||
}
|
||||
|
||||
// should never error
|
||||
asn1result, err := asn1.Marshal(raw)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
19
pkg/tools/asn1obj/oid.go
Normal file
19
pkg/tools/asn1obj/oid.go
Normal file
|
@ -0,0 +1,19 @@
|
|||
package asn1obj
|
||||
|
||||
import "encoding/asn1"
|
||||
|
||||
var (
|
||||
OIDPkscs15Content = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 15, 3, 1} // pkcs15content (PKCS #15 content type)
|
||||
OIDrsaEncryptionPKCS1 = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1} // rsaEncryption (PKCS #1)
|
||||
)
|
||||
|
||||
// ObjectIdentifier returns an ASN.1 OBJECT IDENTIFIER with the oidValue bytes
|
||||
func ObjectIdentifier(oid asn1.ObjectIdentifier) []byte {
|
||||
// should never error
|
||||
asn1result, err := asn1.Marshal(oid)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
26
pkg/tools/asn1obj/sequence.go
Normal file
26
pkg/tools/asn1obj/sequence.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
package asn1obj
|
||||
|
||||
import "encoding/asn1"
|
||||
|
||||
// Sequence returns an ASN.1 SEQUENCE with the specified content
|
||||
func Sequence(content [][]byte) []byte {
|
||||
val := []byte{}
|
||||
for i := range content {
|
||||
val = append(val, content[i]...)
|
||||
}
|
||||
|
||||
raw := asn1.RawValue{
|
||||
Class: asn1.ClassUniversal,
|
||||
Tag: asn1.TagSequence,
|
||||
IsCompound: true,
|
||||
Bytes: val,
|
||||
}
|
||||
|
||||
// should never error
|
||||
asn1result, err := asn1.Marshal(raw)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
16
pkg/tools/asn1obj/utf8string.go
Normal file
16
pkg/tools/asn1obj/utf8string.go
Normal file
|
@ -0,0 +1,16 @@
|
|||
package asn1obj
|
||||
|
||||
import (
|
||||
"encoding/asn1"
|
||||
)
|
||||
|
||||
// UTF8String returns the specified string as a UTF8String
|
||||
func UTF8String(s string) []byte {
|
||||
// should never error
|
||||
asn1result, err := asn1.MarshalWithParams(s, "utf8")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return asn1result
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue