code: func (ks *fileBasedKeyStore) GetKey(ski []byte) (bccsp.Key, error) {
  	// Validate arguments
  	if len(ski) == 0 {
  		return nil, errors.New("Invalid SKI. Cannot be of zero length.")
  	}
  
  	suffix := ks.getSuffix(hex.EncodeToString(ski))
  
  	switch suffix {
  	case "key":
  		// Load the key
  		key, err := ks.loadKey(hex.EncodeToString(ski))
  		if err != nil {
  			return nil, fmt.Errorf("Failed loading key [%x] [%s]", ski, err)
  		}
  
  		return &aesPrivateKey{key, false}, nil
  	case "sk":
  		// Load the private key
  		key, err := ks.loadPrivateKey(hex.EncodeToString(ski))
  		if err != nil {
  			return nil, fmt.Errorf("Failed loading secret key [%x] [%s]", ski, err)
  		}
  
  		switch key.(type) {
  		case *ecdsa.PrivateKey:
  			return &ecdsaPrivateKey{key.(*ecdsa.PrivateKey)}, nil
  		case *rsa.PrivateKey:
  			return &rsaPrivateKey{key.(*rsa.PrivateKey)}, nil
  		default:
  			return nil, errors.New("Secret key type not recognized")
  		}
  	case "pk":
  		// Load the public key
  		key, err := ks.loadPublicKey(hex.EncodeToString(ski))
  		if err != nil {
  			return nil, fmt.Errorf("Failed loading public key [%x] [%s]", ski, err)
  		}
  
  		switch key.(type) {
  		case *ecdsa.PublicKey:
  			return &ecdsaPublicKey{key.(*ecdsa.PublicKey)}, nil
  		case *rsa.PublicKey:
  			return &rsaPublicKey{key.(*rsa.PublicKey)}, nil
  		default:
  			return nil, errors.New("Public key type not recognized")
  		}
  	default:
  		return ks.searchKeystoreForSKI(ski)
  	}
  }
docs: // GetKey returns a key object whose SKI is the one passed.