code: func EncryptPasswordObject(ctx context.Context, password string, currentMasterKey *[]byte) (*primitive.UserPassword, *primitive.MasterKey, error) {
  	pw := &primitive.UserPassword{
  		Alg: Scrypt,
  	}
  
  	// Generate 128 bit (16 byte) salt for password
  	salt := make([]byte, saltBytes) // 16
  	_, err := rand.Read(salt)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	// Encode salt bytes to base64url
  	pw.Salt = base64.RawURLEncoding.EncodeToString(salt)
  
  	// Create password hash bytes
  	pwh, err := derivePassword(ctx, []byte(password), pw.Salt)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	// Encode password value to base64url
  	pw.Value = base64url.New(pwh)
  
  	m, err := CreateMasterKeyObject(ctx, []byte(password), currentMasterKey)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	return pw, m, nil
  }
docs: // EncryptPasswordObject derives the master key (if necessary) and password hash
  // from password and salt, returning the master and password objects