Commit 3f957893 authored by Zhu Yong's avatar Zhu Yong
Browse files

Add 4 pin operations: SecureErase, InstantErase, LockDevice, UnlockDevice

parent a4ee590f
Loading
Loading
Loading
Loading
+59 −4
Original line number Diff line number Diff line
@@ -21,7 +21,10 @@ func NewBlockConnection(op ClientOptions) (*BlockConnection, error) {
func (conn *BlockConnection) NoOp() (Status, error) {
	callback := &GenericCallback{}
	h := NewMessageHandler(callback)
	conn.nbc.NoOp(h)
	err := conn.nbc.NoOp(h)
	if err != nil {
		return callback.Status(), err
	}

	for callback.Done() == false {
		conn.nbc.Run()
@@ -69,7 +72,10 @@ func (conn *BlockConnection) GetPrevious(key []byte) (Record, Status, error) {
func (conn *BlockConnection) GetKeyRange(r *KeyRange) ([][]byte, Status, error) {
	callback := &GetKeyRangeCallback{}
	h := NewMessageHandler(callback)
	conn.nbc.GetKeyRange(r, h)
	err := conn.nbc.GetKeyRange(r, h)
	if err != nil {
		return nil, callback.Status(), err
	}

	for callback.Done() == false {
		conn.nbc.Run()
@@ -81,7 +87,10 @@ func (conn *BlockConnection) GetKeyRange(r *KeyRange) ([][]byte, Status, error)
func (conn *BlockConnection) Delete(entry *Record) (Status, error) {
	callback := &GenericCallback{}
	h := NewMessageHandler(callback)
	conn.nbc.Delete(entry, h)
	err := conn.nbc.Delete(entry, h)
	if err != nil {
		return callback.Status(), err
	}

	for callback.Done() == false {
		conn.nbc.Run()
@@ -93,7 +102,36 @@ func (conn *BlockConnection) Delete(entry *Record) (Status, error) {
func (conn *BlockConnection) Put(entry *Record) (Status, error) {
	callback := &GenericCallback{}
	h := NewMessageHandler(callback)
	conn.nbc.Put(entry, h)
	err := conn.nbc.Put(entry, h)
	if err != nil {
		return callback.Status(), err
	}

	for callback.Done() == false {
		conn.nbc.Run()
	}

	return callback.Status(), nil
}

func (conn *BlockConnection) pinop(pin []byte, op kproto.Command_PinOperation_PinOpType) (Status, error) {
	callback := &GenericCallback{}
	h := NewMessageHandler(callback)

	var err error = nil
	switch op {
	case kproto.Command_PinOperation_SECURE_ERASE_PINOP:
		err = conn.nbc.SecureErase(pin, h)
	case kproto.Command_PinOperation_ERASE_PINOP:
		err = conn.nbc.InstantErase(pin, h)
	case kproto.Command_PinOperation_LOCK_PINOP:
		err = conn.nbc.LockDevice(pin, h)
	case kproto.Command_PinOperation_UNLOCK_PINOP:
		err = conn.nbc.UnlockDevice(pin, h)
	}
	if err != nil {
		return callback.Status(), err
	}

	for callback.Done() == false {
		conn.nbc.Run()
@@ -102,6 +140,23 @@ func (conn *BlockConnection) Put(entry *Record) (Status, error) {
	return callback.Status(), nil
}

func (conn *BlockConnection) SecureErase(pin []byte) (Status, error) {
	return conn.pinop(pin, kproto.Command_PinOperation_SECURE_ERASE_PINOP)
}

func (conn *BlockConnection) InstantErase(pin []byte) (Status, error) {
	return conn.pinop(pin, kproto.Command_PinOperation_ERASE_PINOP)

}

func (conn *BlockConnection) LockDevice(pin []byte) (Status, error) {
	return conn.pinop(pin, kproto.Command_PinOperation_LOCK_PINOP)
}

func (conn *BlockConnection) UnlockDevice(pin []byte) (Status, error) {
	return conn.pinop(pin, kproto.Command_PinOperation_UNLOCK_PINOP)
}

func (conn *BlockConnection) Close() {
	conn.nbc.Close()
}
+35 −0
Original line number Diff line number Diff line
@@ -114,6 +114,41 @@ func (conn *NonBlockConnection) Put(entry *Record, h *MessageHandler) error {
	return err
}

func (conn *NonBlockConnection) pinop(pin []byte, op kproto.Command_PinOperation_PinOpType, h *MessageHandler) error {
	msg := newMessage(kproto.Message_PINAUTH)
	msg.PinAuth = &kproto.Message_PINauth{
		Pin: pin,
	}

	cmd := newCommand(kproto.Command_PINOP)

	cmd.Body = &kproto.Command_Body{
		PinOp: &kproto.Command_PinOperation{
			PinOpType: &op,
		},
	}

	err := conn.service.submit(msg, cmd, nil, h)
	return err
}

func (conn *NonBlockConnection) SecureErase(pin []byte, h *MessageHandler) error {
	return conn.pinop(pin, kproto.Command_PinOperation_SECURE_ERASE_PINOP, h)
}

func (conn *NonBlockConnection) InstantErase(pin []byte, h *MessageHandler) error {
	return conn.pinop(pin, kproto.Command_PinOperation_ERASE_PINOP, h)

}

func (conn *NonBlockConnection) LockDevice(pin []byte, h *MessageHandler) error {
	return conn.pinop(pin, kproto.Command_PinOperation_LOCK_PINOP, h)
}

func (conn *NonBlockConnection) UnlockDevice(pin []byte, h *MessageHandler) error {
	return conn.pinop(pin, kproto.Command_PinOperation_UNLOCK_PINOP, h)
}

func (conn *NonBlockConnection) Run() error {
	return conn.service.listen()
}