code: func (e *Engine) Unbox(ctx context.Context, ct, nonce []byte,
  	privKP *EncryptionKeyPair, pubKey []byte) (*secure.Secret, error) {
  
  	privKey, err := e.Unseal(ctx, privKP.Private, privKP.PNonce)
  	if err != nil {
  		return nil, err
  	}
  	defer privKey.Destroy()
  
  	nonceb := [24]byte{}
  	copy(nonceb[:], nonce)
  
  	// Get a pointer to the underlying private key in memory
  	privkb := (*[32]byte)(unsafe.Pointer(&privKey.Buffer()[0]))
  
  	pubkb := [32]byte{}
  	copy(pubkb[:], pubKey)
  
  	err = ctxutil.ErrIfDone(ctx)
  	if err != nil {
  		return nil, err
  	}
  
  	pt, success := box.Open([]byte{}, ct, &nonceb, &pubkb, privkb)
  	if !success {
  		return nil, errors.New("Failed to decrypt ciphertext")
  	}
  
  	return e.guard.Secret(pt)
  }
docs: // Unbox Decrypts and verifies ciphertext ct that was previously encrypted using
  // the provided nonce, and the inverse parts of the provided keypairs.