kdf_blake3.go 923 B

12345678910111213141516171819202122232425262728293031
  1. package shadowsocks2022
  2. import (
  3. "lukechampine.com/blake3"
  4. "github.com/v2fly/v2ray-core/v5/common/buf"
  5. )
  6. func newBLAKE3KeyDerivation() *BLAKE3KeyDerivation {
  7. return &BLAKE3KeyDerivation{}
  8. }
  9. type BLAKE3KeyDerivation struct{}
  10. func (b BLAKE3KeyDerivation) GetSessionSubKey(effectivePsk, salt []byte, outKey []byte) error {
  11. keyingMaterialBuffer := buf.New()
  12. keyingMaterialBuffer.Write(effectivePsk)
  13. keyingMaterialBuffer.Write(salt)
  14. blake3.DeriveKey(outKey, "shadowsocks 2022 session subkey", keyingMaterialBuffer.Bytes())
  15. keyingMaterialBuffer.Release()
  16. return nil
  17. }
  18. func (b BLAKE3KeyDerivation) GetIdentitySubKey(effectivePsk, salt []byte, outKey []byte) error {
  19. keyingMaterialBuffer := buf.New()
  20. keyingMaterialBuffer.Write(effectivePsk)
  21. keyingMaterialBuffer.Write(salt)
  22. blake3.DeriveKey(outKey, "shadowsocks 2022 identity subkey", keyingMaterialBuffer.Bytes())
  23. keyingMaterialBuffer.Release()
  24. return nil
  25. }