Added support for ECDH in enveloped data with ECDSA certificates.
- fixed parsing of choice(was compatible with Apple mail.app which tagged kari explicitly) - minor fixes
This commit is contained in:
18
asn1/asn1.go
18
asn1/asn1.go
@ -760,7 +760,7 @@ func parseField(v reflect.Value, bytes []byte, initOffset int, params fieldParam
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if params.explicit {
|
||||
if params.explicit && !params.choice {
|
||||
expectedClass := ClassContextSpecific
|
||||
if params.application {
|
||||
expectedClass = ClassApplication
|
||||
@ -968,19 +968,13 @@ func parseField(v reflect.Value, bytes []byte, initOffset int, params fieldParam
|
||||
}
|
||||
|
||||
innerOffset := 0
|
||||
if params.choice {
|
||||
if !params.explicit {
|
||||
innerBytes = bytes[initOffset:]
|
||||
}
|
||||
}
|
||||
for i := 0; i < structType.NumField(); i++ {
|
||||
field := structType.Field(i)
|
||||
if params.choice {
|
||||
tag := parseFieldParameters(field.Tag.Get("asn1")).tag
|
||||
if tag != nil && t.tag == *tag || t.class != ClassContextSpecific && tag == nil {
|
||||
if tag == nil || params.set {
|
||||
innerBytes = bytes[initOffset:offset]
|
||||
}
|
||||
innerOffset, err = parseField(val.Field(i), innerBytes, innerOffset, fieldParameters{})
|
||||
return
|
||||
}
|
||||
continue
|
||||
}
|
||||
if i == 0 && field.Type == rawContentsType {
|
||||
continue
|
||||
}
|
||||
|
@ -482,9 +482,6 @@ func makeBody(value reflect.Value, params fieldParameters) (e encoder, err error
|
||||
m := make([]encoder, n1)
|
||||
for i := 0; i < n1; i++ {
|
||||
fp := parseFieldParameters(t.Field(i + startingField).Tag.Get("asn1"))
|
||||
if params.explicit && params.choice {
|
||||
fp.explicit = true
|
||||
}
|
||||
m[i], err = makeField(v.Field(i+startingField), fp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -501,9 +498,6 @@ func makeBody(value reflect.Value, params fieldParameters) (e encoder, err error
|
||||
|
||||
var fp fieldParameters
|
||||
fp.choice = params.choice
|
||||
if params.choice && params.set {
|
||||
fp.explicit = true
|
||||
}
|
||||
|
||||
switch l := v.Len(); l {
|
||||
case 0:
|
||||
|
Reference in New Issue
Block a user