code: func DecryptKey(keyjson []byte, auth string) (*Key, error) {
  	// Parse the json into a simple map to fetch the key version
  	m := make(map[string]interface{})
  	if err := json.Unmarshal(keyjson, &m); err != nil {
  		return nil, err
  	}
  	// Depending on the version try to parse one way or another
  	var (
  		keyBytes, keyId []byte
  		err             error
  	)
  	if version, ok := m["version"].(string); ok && version == "1" {
  		k := new(encryptedKeyJSONV1)
  		if err := json.Unmarshal(keyjson, k); err != nil {
  			return nil, err
  		}
  		keyBytes, keyId, err = decryptKeyV1(k, auth)
  	} else {
  		k := new(encryptedKeyJSONV3)
  		if err := json.Unmarshal(keyjson, k); err != nil {
  			return nil, err
  		}
  		keyBytes, keyId, err = decryptKeyV3(k, auth)
  	}
  	// Handle any decryption errors and return the key
  	if err != nil {
  		return nil, err
  	}
  	key := crypto.ToECDSAUnsafe(keyBytes)
  
  	return &Key{
  		Id:         uuid.UUID(keyId),
  		Address:    crypto.PubkeyToAddress(key.PublicKey),
  		PrivateKey: key,
  	}, nil
  }
docs: // DecryptKey decrypts a key from a json blob, returning the private key itself.