code: func ParseEd25519PrivateKey(der []byte) (crypto.PrivateKey, error) {
  	asym := new(oneAsymmetricKey)
  	if rest, err := asn1.Unmarshal(der, asym); err != nil {
  		return nil, err
  	} else if len(rest) > 0 {
  		return nil, errors.New("OneAsymmetricKey too long")
  	}
  
  	// Check that the key type is correct.
  	if !asym.Algorithm.Algorithm.Equal(ed25519OID) {
  		return nil, errEd25519WrongID
  	}
  
  	// Unmarshal the inner CurvePrivateKey.
  	seed := new(curvePrivateKey)
  	if rest, err := asn1.Unmarshal(asym.PrivateKey, seed); err != nil {
  		return nil, err
  	} else if len(rest) > 0 {
  		return nil, errors.New("CurvePrivateKey too long")
  	}
  
  	return ed25519.NewKeyFromSeed(*seed), nil
  }
docs: // ParseEd25519PrivateKey returns the Ed25519 private key encoded by the input.