public static HttpRequestMessage WithAuthorization()

in JetBrains.AppStore.NotaryApi/HttpEx.cs [28:48]


    public static HttpRequestMessage WithAuthorization(this HttpRequestMessage message, AppStoreConnectAuth auth)
    {
        if (new PemReader(new StringReader(auth.PrivateKey)).ReadObject() is not ECPrivateKeyParameters ecPrivateKeyParameters)
            throw new Exception("invalid private key format");
        var q = ecPrivateKeyParameters.Parameters.G.Multiply(ecPrivateKeyParameters.D).Normalize();  // https://github.com/dotnet/core/issues/2037#issuecomment-436340605
        var x = q.AffineXCoord.GetEncoded();
        var y = q.AffineYCoord.GetEncoded();
        var d = ecPrivateKeyParameters.D.ToByteArrayUnsigned();
        var msEcp = new ECParameters { Curve = ECCurve.NamedCurves.nistP256, Q = { X = x, Y = y }, D = d };
        var tokenHandler = new JsonWebTokenHandler { SetDefaultTimesOnTokenCreation = false };
        var token = tokenHandler.CreateToken(new SecurityTokenDescriptor
        {
            SigningCredentials = new SigningCredentials(new ECDsaSecurityKey(ECDsa.Create(msEcp)) { KeyId = auth.KeyId }, SecurityAlgorithms.EcdsaSha256),
            Issuer = auth.IssuerId,
            IssuedAt = DateTime.UtcNow,
            Expires = DateTime.UtcNow.AddMinutes(5),
            Audience = NotaryClient.DefaultAppStoreConnectAudience
        });
        message.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
        return message;
    }