ImportWrapped
This commit is contained in:
parent
d3f55e54bd
commit
88cd174823
|
@ -429,3 +429,24 @@ func CreateExportWrappedCommand(wrapObjID uint16, objType uint8, objID uint16) (
|
|||
|
||||
return command, nil
|
||||
}
|
||||
|
||||
// CreateImportWrappedCommand will import a wrapped/encrypted Object that was
|
||||
// previously exported by an YubiHSM2 device. The imported object will retain
|
||||
// its metadata (Object ID, Domains, Capabilities …etc), however, the object’s
|
||||
// origin will be marked as imported instead of generated.
|
||||
func CreateImportWrappedCommand(wrapObjID uint16, nonce, data []byte) (*CommandMessage, error) {
|
||||
command := &CommandMessage{
|
||||
CommandType: CommandTypeImportWrapped,
|
||||
}
|
||||
if len(nonce) != 13 {
|
||||
return nil, errors.New("invalid nonce length")
|
||||
}
|
||||
|
||||
payload := bytes.NewBuffer([]byte{})
|
||||
binary.Write(payload, binary.BigEndian, wrapObjID)
|
||||
payload.Write(nonce)
|
||||
payload.Write(data)
|
||||
command.Data = payload.Bytes()
|
||||
|
||||
return command, nil
|
||||
}
|
||||
|
|
|
@ -112,6 +112,11 @@ type (
|
|||
Nonce []byte
|
||||
Data []byte
|
||||
}
|
||||
|
||||
ImportWrappedResponse struct {
|
||||
ObjectType uint8
|
||||
ObjectID uint16
|
||||
}
|
||||
)
|
||||
|
||||
// ParseResponse parses the binary response from the card to the relevant Response type.
|
||||
|
@ -182,6 +187,8 @@ func ParseResponse(data []byte) (Response, error) {
|
|||
return parseAttestationCertResponse(payload)
|
||||
case CommandTypeExportWrapped:
|
||||
return parseExportWrappedResponse(payload)
|
||||
case CommandTypeImportWrapped:
|
||||
return parseImportWrappedResponse(payload)
|
||||
case ErrorResponseCode:
|
||||
return nil, parseErrorResponse(payload)
|
||||
default:
|
||||
|
@ -415,6 +422,23 @@ func parseExportWrappedResponse(payload []byte) (Response, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func parseImportWrappedResponse(payload []byte) (Response, error) {
|
||||
if len(payload) != 3 {
|
||||
return nil, errors.New("invalid response payload length")
|
||||
}
|
||||
|
||||
var objID uint16
|
||||
err := binary.Read(bytes.NewReader(payload[1:3]), binary.BigEndian, &objID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &ImportWrappedResponse{
|
||||
ObjectType: uint8(payload[0]),
|
||||
ObjectID: objID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Error formats a card error message into a human readable format
|
||||
func (e *Error) Error() string {
|
||||
message := ""
|
||||
|
|
Loading…
Reference in New Issue