/** * Return an appropriate TimeStampResponse. * <p> * If genTime is null a timeNotAvailable error response will be returned. * * @param request the request this response is for. * @param serialNumber serial number for the response token. * @param genTime generation time for the response token. * @param provider provider to use for signature calculation. * @return * @throws NoSuchAlgorithmException * @throws NoSuchProviderException * @throws TSPException * </p> */ public TimeStampResponse Generate( TimeStampRequest request, BigInteger serialNumber, DateTimeObject genTime) { TimeStampResp resp; try { if (genTime == null) { throw new TspValidationException("The time source is not available.", PkiFailureInfo.TimeNotAvailable); } request.Validate(acceptedAlgorithms, acceptedPolicies, acceptedExtensions); this.status = PkiStatus.Granted; this.AddStatusString("Operation Okay"); PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); ContentInfo tstTokenContentInfo; try { TimeStampToken token = tokenGenerator.Generate(request, serialNumber, genTime.Value); byte[] encoded = token.ToCmsSignedData().GetEncoded(); tstTokenContentInfo = ContentInfo.GetInstance(Asn1Object.FromByteArray(encoded)); } catch (IOException e) { throw new TspException("Timestamp token received cannot be converted to ContentInfo", e); } resp = new TimeStampResp(pkiStatusInfo, tstTokenContentInfo); } catch (TspValidationException e) { status = PkiStatus.Rejection; this.SetFailInfoField(e.FailureCode); this.AddStatusString(e.Message); PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); resp = new TimeStampResp(pkiStatusInfo, null); } try { return(new TimeStampResponse(resp)); } catch (IOException e) { throw new TspException("created badly formatted response!", e); } }
private CertStatus(Asn1Sequence seq) { certHash = Asn1OctetString.GetInstance(seq[0]); certReqId = DerInteger.GetInstance(seq[1]); if (seq.Count > 2) { statusInfo = PkiStatusInfo.GetInstance(seq[2]); } }
public virtual PkiStatusInfo[] GetStatus() { PkiStatusInfo[] array = new PkiStatusInfo[status.Count]; for (int i = 0; i != array.Length; i++) { array[i] = PkiStatusInfo.GetInstance(status[i]); } return(array); }
public ErrorMsgContent(PkiStatusInfo pkiStatusInfo, DerInteger errorCode, PkiFreeText errorDetails) { if (pkiStatusInfo == null) { throw new ArgumentNullException("pkiStatusInfo"); } this.pkiStatusInfo = pkiStatusInfo; this.errorCode = errorCode; this.errorDetails = errorDetails; }
public virtual RevRepContentBuilder Add(PkiStatusInfo status, CertId certId) { if (this.status.Count != revCerts.Count) { throw new InvalidOperationException("status and revCerts sequence must be in common order"); } this.status.Add(status); revCerts.Add(certId); return(this); }
private TimeStampResp( Asn1Sequence seq) { this.pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]); if (seq.Count > 1) { this.timeStampToken = ContentInfo.GetInstance(seq[1]); } }
public override void Respond(HttpListenerContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (!string.Equals(context.Request.ContentType, RequestContentType, StringComparison.OrdinalIgnoreCase)) { context.Response.StatusCode = 400; return; } var bytes = ReadRequestBody(context.Request); var request = new TimeStampRequest(bytes); PkiStatusInfo statusInfo; BcContentInfo timeStampToken = null; if (_options.ReturnFailure) { statusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("Unsupported algorithm")), new PkiFailureInfo(PkiFailureInfo.BadAlg)); } else { statusInfo = new PkiStatusInfo((int)PkiStatus.Granted); var generalizedTime = DateTime.UtcNow; if (_options.GeneralizedTime.HasValue) { generalizedTime = _options.GeneralizedTime.Value.UtcDateTime; } CmsSignedData timestamp = GenerateTimestamp(request, _nextSerialNumber, generalizedTime); timeStampToken = timestamp.ContentInfo; } _serialNumbers.Add(_nextSerialNumber); _nextSerialNumber = _nextSerialNumber.Add(BigInteger.One); context.Response.ContentType = ResponseContentType; var response = new TimeStampResp(statusInfo, timeStampToken); WriteResponseBody(context.Response, response.GetEncoded()); }
public CertResponse(DerInteger certReqId, PkiStatusInfo status, CertifiedKeyPair certifiedKeyPair, Asn1OctetString rspInfo) { if (certReqId == null) { throw new ArgumentNullException("certReqId"); } if (status == null) { throw new ArgumentNullException("status"); } this.certReqId = certReqId; this.status = status; this.certifiedKeyPair = certifiedKeyPair; this.rspInfo = rspInfo; }
public TimeStampResponse Generate(TimeStampRequest request, BigInteger serialNumber, DateTimeObject genTime) { //IL_0076: Expected O, but got Unknown //IL_00cf: Expected O, but got Unknown TimeStampResp resp; try { if (genTime == null) { throw new TspValidationException("The time source is not available.", 512); } request.Validate(acceptedAlgorithms, acceptedPolicies, acceptedExtensions); status = PkiStatus.Granted; AddStatusString("Operation Okay"); PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); ContentInfo instance; try { TimeStampToken timeStampToken = tokenGenerator.Generate(request, serialNumber, genTime.Value); byte[] encoded = timeStampToken.ToCmsSignedData().GetEncoded(); instance = ContentInfo.GetInstance(Asn1Object.FromByteArray(encoded)); } catch (IOException val) { IOException e = val; throw new TspException("Timestamp token received cannot be converted to ContentInfo", (global::System.Exception)(object) e); } resp = new TimeStampResp(pkiStatusInfo, instance); } catch (TspValidationException ex) { status = PkiStatus.Rejection; SetFailInfoField(ex.FailureCode); AddStatusString(((global::System.Exception)ex).get_Message()); PkiStatusInfo pkiStatusInfo2 = GetPkiStatusInfo(); resp = new TimeStampResp(pkiStatusInfo2, null); } try { return(new TimeStampResponse(resp)); } catch (IOException val2) { IOException e2 = val2; throw new TspException("created badly formatted response!", (global::System.Exception)(object) e2); } }
private ErrorMsgContent(Asn1Sequence seq) { pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]); for (int i = 1; i < seq.Count; i++) { Asn1Encodable asn1Encodable = seq[i]; if (asn1Encodable is DerInteger) { errorCode = DerInteger.GetInstance(asn1Encodable); } else { errorDetails = PkiFreeText.GetInstance(asn1Encodable); } } }
public TimeStampResponse GenerateFailResponse(PkiStatus status, int failInfoField, string statusString) { this.status = status; SetFailInfoField(failInfoField); if (statusString != null) { AddStatusString(statusString); } PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); TimeStampResp resp = new TimeStampResp(pkiStatusInfo, null); try { return(new TimeStampResponse(resp)); } catch (IOException e) { throw new TspException("created badly formatted response!", e); } }
public TimeStampResponse GenerateFailResponse(PkiStatus status, int failInfoField, string statusString) { //IL_0031: Expected O, but got Unknown this.status = status; SetFailInfoField(failInfoField); if (statusString != null) { AddStatusString(statusString); } PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); TimeStampResp resp = new TimeStampResp(pkiStatusInfo, null); try { return(new TimeStampResponse(resp)); } catch (IOException val) { IOException e = val; throw new TspException("created badly formatted response!", (global::System.Exception)(object) e); } }
public CertResponse(DerInteger certReqId, PkiStatusInfo status) : this(certReqId, status, null, null) { }
public TimeStampResp(PkiStatusInfo pkiStatusInfo, ContentInfo timeStampToken) { this.pkiStatusInfo = pkiStatusInfo; this.timeStampToken = timeStampToken; }
public ErrorMsgContent(PkiStatusInfo pkiStatusInfo) : this(pkiStatusInfo, null, null) { }
/// <summary> /// Retrieves the <see cref="TimeStampRequest"/> from the <see cref="TspHttpRequest"/> /// </summary> /// <param name="tspHttpRequest"><see cref="TspHttpRequest"/></param> /// <returns><see cref="TspReqResult"/> containing the <see cref="TimeStampRequest"/> and the <see cref="PkiStatusInfo"/></returns> private TspReqResult GetTimeStampRequest(TspHttpRequest tspHttpRequest) { // Validates the header of the request if (tspHttpRequest.MediaType != "application/timestamp-query") { var pkiStatusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("Content type is not 'application/timestamp-query'.")), new PkiFailureInfo(PkiFailureInfo.BadRequest)); return(new TspReqResult { PkiStatusInfo = pkiStatusInfo }); } // Try to create the TimeStampRequest from the http request TimeStampRequest timeStampRequest; try { timeStampRequest = new TimeStampRequest(tspHttpRequest.Content); } catch (Exception) { var pkiStatusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("Query in bad format")), new PkiFailureInfo(PkiFailureInfo.BadDataFormat)); return(new TspReqResult { PkiStatusInfo = pkiStatusInfo }); } // Validates whether the request uses accepted hash algorithms if (AcceptedAlgorithms.All(algorithm => algorithm.Id != timeStampRequest.MessageImprintAlgOid)) { var pkiStatusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("Hash Algorithm is not accepted.")), new PkiFailureInfo(PkiFailureInfo.BadAlg)); return(new TspReqResult { PkiStatusInfo = pkiStatusInfo }); } // Validates whether the hashed message length matches the digest length of the hash algorithm if (timeStampRequest.GetMessageImprintDigest().Length != TspAlgorithmUtil.GetDigestLength(new DerObjectIdentifier(timeStampRequest.MessageImprintAlgOid))) { var pkiStatusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("Digest length is not equal the message imprint length.")), new PkiFailureInfo(PkiFailureInfo.BadDataFormat)); return(new TspReqResult { PkiStatusInfo = pkiStatusInfo }); } // Validates whether the TSA accepts the policy for stamping if (timeStampRequest.ReqPolicy != null && timeStampRequest.ReqPolicy != BcTimeStampResponderRepository.GetPolicyOid()) { var pkiStatusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("TSP policy is unknown.")), new PkiFailureInfo(PkiFailureInfo.UnacceptedPolicy)); return(new TspReqResult { PkiStatusInfo = pkiStatusInfo }); } // Validates whether the TSA accepts the extensions if (timeStampRequest.HasExtensions) { var acceptedExtensions = BcTimeStampResponderRepository.GetAcceptedExtensions(); var extensions = timeStampRequest.GetExtensionOids() .Cast <DerObjectIdentifier>() .Select(oid => timeStampRequest.GetExtension(oid)); if (extensions.Any(e => !acceptedExtensions.Any(a => a.IsCritical == e.IsCritical && Equals(a.Value, e.Value)))) { var pkiStatusInfo = new PkiStatusInfo( (int)PkiStatus.Rejection, new PkiFreeText(new DerUtf8String("TSP does not recognizes any extensions")), new PkiFailureInfo(PkiFailureInfo.UnacceptedExtension)); return(new TspReqResult { PkiStatusInfo = pkiStatusInfo }); } } // returns the time stamp request with granted status return(new TspReqResult { PkiStatusInfo = new PkiStatusInfo((int)PkiStatus.Granted), TimeStampRequest = timeStampRequest }); }
public CertStatus(byte[] certHash, BigInteger certReqId, PkiStatusInfo statusInfo) { this.certHash = new DerOctetString(certHash); this.certReqId = new DerInteger(certReqId); this.statusInfo = statusInfo; }
public virtual RevRepContentBuilder Add(PkiStatusInfo status) { this.status.Add(status); return(this); }