use of org.omegat.filters3.Attribute in project sis by apache.
the class VariableWrapper method getAttributeValues.
/**
* Returns the sequence of values for the given attribute, or an empty array if none.
* The elements will be of class {@link String} if {@code numeric} is {@code false},
* or {@link Number} if {@code numeric} is {@code true}.
*/
@Override
public Object[] getAttributeValues(final String attributeName, final boolean numeric) {
final Attribute attribute = variable.findAttributeIgnoreCase(attributeName);
if (attribute != null) {
boolean hasValues = false;
final Object[] values = new Object[attribute.getLength()];
for (int i = 0; i < values.length; i++) {
if (numeric) {
if ((values[i] = attribute.getNumericValue(i)) != null) {
hasValues = true;
}
} else {
Object value = attribute.getValue(i);
if (value != null) {
String text = value.toString().trim();
if (!text.isEmpty()) {
values[i] = text;
hasValues = true;
}
}
}
}
if (hasValues) {
return values;
}
}
return new Object[0];
}
use of org.omegat.filters3.Attribute in project keystore-explorer by kaikramer.
the class X509Ext method getSubjectDirectoryAttributesStringValue.
private String getSubjectDirectoryAttributesStringValue(byte[] value) throws IOException {
// @formatter:off
/*
* SubjectDirectoryAttributes ::= ASN1Sequence SIZE (1..MAX) OF Attribute
*
* Attribute ::= ASN1Sequence
* {
* type AttributeType,
* values SET OF AttributeValue
* }
*/
// @formatter:on
StringBuilder sb = new StringBuilder();
SubjectDirectoryAttributes subjectDirectoryAttributes = SubjectDirectoryAttributes.getInstance(value);
for (Object attribute : subjectDirectoryAttributes.getAttributes()) {
ASN1ObjectIdentifier attributeType = ((Attribute) attribute).getAttrType();
String attributeTypeStr = attributeType.getId();
ASN1Encodable[] attributeValues = ((Attribute) attribute).getAttributeValues();
for (ASN1Encodable attributeValue : attributeValues) {
String attributeValueStr = getAttributeValueString(attributeType, attributeValue);
sb.append(MessageFormat.format("{0}={1}", attributeTypeStr, attributeValueStr));
sb.append(NEWLINE);
}
}
return sb.toString();
}
use of org.omegat.filters3.Attribute in project jspwiki by apache.
the class XHtmlElementToWikiTranslator method printChildren.
private void printChildren(Element base) throws IOException, JDOMException {
for (Iterator i = base.getContent().iterator(); i.hasNext(); ) {
Object c = i.next();
if (c instanceof Element) {
Element e = (Element) c;
String n = e.getName().toLowerCase();
if (n.equals("h1")) {
m_out.print("\n!!! ");
print(e);
m_out.println();
} else if (n.equals("h2")) {
m_out.print("\n!!! ");
print(e);
m_out.println();
} else if (n.equals("h3")) {
m_out.print("\n!! ");
print(e);
m_out.println();
} else if (n.equals("h4")) {
m_out.print("\n! ");
print(e);
m_out.println();
} else if (n.equals("p")) {
if (// we don't want to print empty elements: <p></p>
e.getContentSize() != 0) {
m_out.println();
print(e);
m_out.println();
}
} else if (n.equals("br")) {
if (m_preStack.isPreMode()) {
m_out.println();
} else {
String parentElementName = base.getName().toLowerCase();
//
if (parentElementName.matches("p|div") && !base.getText().matches("(?s).*\\[\\{.*\\}\\].*")) {
m_out.print(" \\\\\n");
} else {
m_out.print(" \\\\");
}
}
print(e);
} else if (n.equals("hr")) {
m_out.println();
print("----");
print(e);
m_out.println();
} else if (n.equals("table")) {
if (!m_outTimmer.isCurrentlyOnLineBegin()) {
m_out.println();
}
print(e);
} else if (n.equals("tr")) {
print(e);
m_out.println();
} else if (n.equals("td")) {
m_out.print("| ");
print(e);
if (!m_preStack.isPreMode()) {
print(" ");
}
} else if (n.equals("th")) {
m_out.print("|| ");
print(e);
if (!m_preStack.isPreMode()) {
print(" ");
}
} else if (n.equals("a")) {
if (!isIgnorableWikiMarkupLink(e)) {
if (e.getChild("IMG") != null) {
printImage(e);
} else {
String ref = e.getAttributeValue("href");
if (ref == null) {
if (isUndefinedPageLink(e)) {
m_out.print("[");
print(e);
m_out.print("]");
} else {
print(e);
}
} else {
ref = trimLink(ref);
if (ref != null) {
if (// This is a link to a footnote.
ref.startsWith("#")) {
// convert "#ref-PageName-1" to just "1"
String href = ref.replaceFirst("#ref-.+-(\\d+)", "$1");
// remove the brackets around "[1]"
String textValue = e.getValue().substring(1, (e.getValue().length() - 1));
if (href.equals(textValue)) {
// handles the simplest case. Example: [1]
print(e);
} else {
// handles the case where the link text is different from the href. Example: [something|1]
m_out.print("[" + textValue + "|" + href + "]");
}
} else {
Map augmentedWikiLinkAttributes = getAugmentedWikiLinkAttributes(e);
m_out.print("[");
print(e);
if (!e.getTextTrim().equalsIgnoreCase(ref)) {
m_out.print("|");
print(ref);
if (!augmentedWikiLinkAttributes.isEmpty()) {
m_out.print("|");
String augmentedWikiLink = augmentedWikiLinkMapToString(augmentedWikiLinkAttributes);
m_out.print(augmentedWikiLink);
}
} else if (!augmentedWikiLinkAttributes.isEmpty()) {
// If the ref has the same value as the text and also if there
// are attributes, then just print: [ref|ref|attributes] .
m_out.print("|" + ref + "|");
String augmentedWikiLink = augmentedWikiLinkMapToString(augmentedWikiLinkAttributes);
m_out.print(augmentedWikiLink);
}
m_out.print("]");
}
}
}
}
}
} else if (n.equals("b") || n.equals("strong")) {
m_out.print("__");
print(e);
m_out.print("__");
} else if (n.equals("i") || n.equals("em") || n.equals("address")) {
m_out.print("''");
print(e);
m_out.print("''");
} else if (n.equals("u")) {
m_out.print("%%( text-decoration:underline; )");
print(e);
m_out.print("/%");
} else if (n.equals("strike")) {
m_out.print("%%strike ");
print(e);
m_out.print("/%");
// NOTE: don't print a space before or after the double percents because that can break words into two.
// For example: %%(color:red)ABC%%%%(color:green)DEF%% is different from %%(color:red)ABC%% %%(color:green)DEF%%
} else if (n.equals("sup")) {
m_out.print("%%sup ");
print(e);
m_out.print("/%");
} else if (n.equals("sub")) {
m_out.print("%%sub ");
print(e);
m_out.print("/%");
} else if (n.equals("dl")) {
m_out.print("\n");
print(e);
// print a newline after the definition list. If we don't,
// it may cause problems for the subsequent element.
m_out.print("\n");
} else if (n.equals("dt")) {
m_out.print(";");
print(e);
} else if (n.equals("dd")) {
m_out.print(":");
print(e);
} else if (n.equals("ul")) {
m_out.println();
m_liStack.push("*");
print(e);
m_liStack.pop();
} else if (n.equals("ol")) {
m_out.println();
m_liStack.push("#");
print(e);
m_liStack.pop();
} else if (n.equals("li")) {
m_out.print(m_liStack + " ");
print(e);
// The following line assumes that the XHTML has been "pretty-printed"
// (newlines separate child elements from their parents).
boolean lastListItem = base.indexOf(e) == (base.getContentSize() - 2);
boolean sublistItem = m_liStack.toString().length() > 1;
// only print a newline if this <li> element is not the last item within a sublist.
if (!sublistItem || !lastListItem) {
m_out.println();
}
} else if (n.equals("pre")) {
// start JSPWiki "code blocks" on its own line
m_out.print("\n{{{");
m_preStack.push();
print(e);
m_preStack.pop();
// print a newline after the closing braces
// to avoid breaking any subsequent wiki markup that follows.
m_out.print("}}}\n");
} else if (n.equals("code") || n.equals("tt")) {
m_out.print("{{");
m_preStack.push();
print(e);
m_preStack.pop();
m_out.print("}}");
// NOTE: don't print a newline after the closing brackets because if the Text is inside
// a table or list, it would break it if there was a subsequent row or list item.
} else if (n.equals("img")) {
if (!isIgnorableWikiMarkupLink(e)) {
m_out.print("[");
print(trimLink(e.getAttributeValue("src")));
m_out.print("]");
}
} else if (n.equals("form")) {
// remove the hidden input where name="formname" since a new one will be generated again when the xhtml is rendered.
Element formName = (Element) XPath.selectSingleNode(e, "INPUT[@name='formname']");
if (formName != null) {
formName.detach();
}
String name = e.getAttributeValue("name");
m_out.print("\n[{FormOpen");
if (name != null) {
m_out.print(" form='" + name + "'");
}
m_out.print("}]\n");
print(e);
m_out.print("\n[{FormClose}]\n");
} else if (n.equals("input")) {
String type = e.getAttributeValue("type");
String name = e.getAttributeValue("name");
String value = e.getAttributeValue("value");
String checked = e.getAttributeValue("checked");
m_out.print("[{FormInput");
if (type != null) {
m_out.print(" type='" + type + "'");
}
if (name != null) {
// remove the "nbf_" that was prepended since new one will be generated again when the xhtml is rendered.
if (name.startsWith("nbf_")) {
name = name.substring(4, name.length());
}
m_out.print(" name='" + name + "'");
}
if (value != null && !value.equals("")) {
m_out.print(" value='" + value + "'");
}
if (checked != null) {
m_out.print(" checked='" + checked + "'");
}
m_out.print("}]");
print(e);
} else if (n.equals("textarea")) {
String name = e.getAttributeValue("name");
String rows = e.getAttributeValue("rows");
String cols = e.getAttributeValue("cols");
m_out.print("[{FormTextarea");
if (name != null) {
if (name.startsWith("nbf_")) {
name = name.substring(4, name.length());
}
m_out.print(" name='" + name + "'");
}
if (rows != null) {
m_out.print(" rows='" + rows + "'");
}
if (cols != null) {
m_out.print(" cols='" + cols + "'");
}
m_out.print("}]");
print(e);
} else if (n.equals("select")) {
String name = e.getAttributeValue("name");
m_out.print("[{FormSelect");
if (name != null) {
if (name.startsWith("nbf_")) {
name = name.substring(4, name.length());
}
m_out.print(" name='" + name + "'");
}
m_out.print(" value='");
print(e);
m_out.print("'}]");
} else if (n.equals("option")) {
// is expected to be a newline character which is at index of 0).
if (base.indexOf(e) != 1) {
m_out.print(";");
}
Attribute selected = e.getAttribute("selected");
if (selected != null) {
m_out.print("*");
}
String value = e.getAttributeValue("value");
if (value != null) {
m_out.print(value);
} else {
print(e);
}
} else {
print(e);
}
} else {
print(c);
}
}
}
use of org.omegat.filters3.Attribute in project xipki by xipki.
the class XmlX509Certprofile method getExtensions.
@Override
public ExtensionValues getExtensions(Map<ASN1ObjectIdentifier, ExtensionControl> extensionOccurences, X500Name requestedSubject, X500Name grantedSubject, Extensions requestedExtensions, Date notBefore, Date notAfter, PublicCaInfo caInfo) throws CertprofileException, BadCertTemplateException {
ExtensionValues values = new ExtensionValues();
if (CollectionUtil.isEmpty(extensionOccurences)) {
return values;
}
ParamUtil.requireNonNull("requestedSubject", requestedSubject);
ParamUtil.requireNonNull("notBefore", notBefore);
ParamUtil.requireNonNull("notAfter", notAfter);
Set<ASN1ObjectIdentifier> occurences = new HashSet<>(extensionOccurences.keySet());
// AuthorityKeyIdentifier
// processed by the CA
// SubjectKeyIdentifier
// processed by the CA
// KeyUsage
// processed by the CA
// CertificatePolicies
ASN1ObjectIdentifier type = Extension.certificatePolicies;
if (certificatePolicies != null) {
if (occurences.remove(type)) {
values.addExtension(type, certificatePolicies);
}
}
// Policy Mappings
type = Extension.policyMappings;
if (policyMappings != null) {
if (occurences.remove(type)) {
values.addExtension(type, policyMappings);
}
}
// SubjectAltName
type = Extension.subjectAlternativeName;
if (occurences.contains(type)) {
GeneralNames genNames = createRequestedSubjectAltNames(requestedSubject, grantedSubject, requestedExtensions);
if (genNames != null) {
ExtensionValue value = new ExtensionValue(extensionControls.get(type).isCritical(), genNames);
values.addExtension(type, value);
occurences.remove(type);
}
}
// IssuerAltName
// processed by the CA
// Subject Directory Attributes
type = Extension.subjectDirectoryAttributes;
if (occurences.contains(type) && subjectDirAttrsControl != null) {
Extension extension = (requestedExtensions == null) ? null : requestedExtensions.getExtension(type);
if (extension == null) {
throw new BadCertTemplateException("no SubjectDirecotryAttributes extension is contained in the request");
}
ASN1GeneralizedTime dateOfBirth = null;
String placeOfBirth = null;
String gender = null;
List<String> countryOfCitizenshipList = new LinkedList<>();
List<String> countryOfResidenceList = new LinkedList<>();
Map<ASN1ObjectIdentifier, List<ASN1Encodable>> otherAttrs = new HashMap<>();
Vector<?> reqSubDirAttrs = SubjectDirectoryAttributes.getInstance(extension.getParsedValue()).getAttributes();
final int n = reqSubDirAttrs.size();
for (int i = 0; i < n; i++) {
Attribute attr = (Attribute) reqSubDirAttrs.get(i);
ASN1ObjectIdentifier attrType = attr.getAttrType();
ASN1Encodable attrVal = attr.getAttributeValues()[0];
if (ObjectIdentifiers.DN_DATE_OF_BIRTH.equals(attrType)) {
dateOfBirth = ASN1GeneralizedTime.getInstance(attrVal);
} else if (ObjectIdentifiers.DN_PLACE_OF_BIRTH.equals(attrType)) {
placeOfBirth = DirectoryString.getInstance(attrVal).getString();
} else if (ObjectIdentifiers.DN_GENDER.equals(attrType)) {
gender = DERPrintableString.getInstance(attrVal).getString();
} else if (ObjectIdentifiers.DN_COUNTRY_OF_CITIZENSHIP.equals(attrType)) {
String country = DERPrintableString.getInstance(attrVal).getString();
countryOfCitizenshipList.add(country);
} else if (ObjectIdentifiers.DN_COUNTRY_OF_RESIDENCE.equals(attrType)) {
String country = DERPrintableString.getInstance(attrVal).getString();
countryOfResidenceList.add(country);
} else {
List<ASN1Encodable> otherAttrVals = otherAttrs.get(attrType);
if (otherAttrVals == null) {
otherAttrVals = new LinkedList<>();
otherAttrs.put(attrType, otherAttrVals);
}
otherAttrVals.add(attrVal);
}
}
Vector<Attribute> attrs = new Vector<>();
for (ASN1ObjectIdentifier attrType : subjectDirAttrsControl.getTypes()) {
if (ObjectIdentifiers.DN_DATE_OF_BIRTH.equals(attrType)) {
if (dateOfBirth != null) {
String timeStirng = dateOfBirth.getTimeString();
if (!SubjectDnSpec.PATTERN_DATE_OF_BIRTH.matcher(timeStirng).matches()) {
throw new BadCertTemplateException("invalid dateOfBirth " + timeStirng);
}
attrs.add(new Attribute(attrType, new DERSet(dateOfBirth)));
continue;
}
} else if (ObjectIdentifiers.DN_PLACE_OF_BIRTH.equals(attrType)) {
if (placeOfBirth != null) {
ASN1Encodable attrVal = new DERUTF8String(placeOfBirth);
attrs.add(new Attribute(attrType, new DERSet(attrVal)));
continue;
}
} else if (ObjectIdentifiers.DN_GENDER.equals(attrType)) {
if (gender != null && !gender.isEmpty()) {
char ch = gender.charAt(0);
if (!(gender.length() == 1 && (ch == 'f' || ch == 'F' || ch == 'm' || ch == 'M'))) {
throw new BadCertTemplateException("invalid gender " + gender);
}
ASN1Encodable attrVal = new DERPrintableString(gender);
attrs.add(new Attribute(attrType, new DERSet(attrVal)));
continue;
}
} else if (ObjectIdentifiers.DN_COUNTRY_OF_CITIZENSHIP.equals(attrType)) {
if (!countryOfCitizenshipList.isEmpty()) {
for (String country : countryOfCitizenshipList) {
if (!SubjectDnSpec.isValidCountryAreaCode(country)) {
throw new BadCertTemplateException("invalid countryOfCitizenship code " + country);
}
ASN1Encodable attrVal = new DERPrintableString(country);
attrs.add(new Attribute(attrType, new DERSet(attrVal)));
}
continue;
}
} else if (ObjectIdentifiers.DN_COUNTRY_OF_RESIDENCE.equals(attrType)) {
if (!countryOfResidenceList.isEmpty()) {
for (String country : countryOfResidenceList) {
if (!SubjectDnSpec.isValidCountryAreaCode(country)) {
throw new BadCertTemplateException("invalid countryOfResidence code " + country);
}
ASN1Encodable attrVal = new DERPrintableString(country);
attrs.add(new Attribute(attrType, new DERSet(attrVal)));
}
continue;
}
} else if (otherAttrs.containsKey(attrType)) {
for (ASN1Encodable attrVal : otherAttrs.get(attrType)) {
attrs.add(new Attribute(attrType, new DERSet(attrVal)));
}
continue;
}
throw new BadCertTemplateException("could not process type " + attrType.getId() + " in extension SubjectDirectoryAttributes");
}
SubjectDirectoryAttributes subjDirAttrs = new SubjectDirectoryAttributes(attrs);
ExtensionValue extValue = new ExtensionValue(extensionControls.get(type).isCritical(), subjDirAttrs);
values.addExtension(type, extValue);
occurences.remove(type);
}
// Basic Constraints
// processed by the CA
// Name Constraints
type = Extension.nameConstraints;
if (nameConstraints != null) {
if (occurences.remove(type)) {
values.addExtension(type, nameConstraints);
}
}
// PolicyConstrains
type = Extension.policyConstraints;
if (policyConstraints != null) {
if (occurences.remove(type)) {
values.addExtension(type, policyConstraints);
}
}
// ExtendedKeyUsage
// processed by CA
// CRL Distribution Points
// processed by the CA
// Inhibit anyPolicy
type = Extension.inhibitAnyPolicy;
if (inhibitAnyPolicy != null) {
if (occurences.remove(type)) {
values.addExtension(type, inhibitAnyPolicy);
}
}
// Freshest CRL
// processed by the CA
// Authority Information Access
// processed by the CA
// Subject Information Access
// processed by the CA
// Admission
type = ObjectIdentifiers.id_extension_admission;
if (occurences.contains(type) && admission != null) {
if (admission.isInputFromRequestRequired()) {
Extension extension = (requestedExtensions == null) ? null : requestedExtensions.getExtension(type);
if (extension == null) {
throw new BadCertTemplateException("No Admission extension is contained in the request");
}
Admissions[] reqAdmissions = org.bouncycastle.asn1.isismtt.x509.AdmissionSyntax.getInstance(extension.getParsedValue()).getContentsOfAdmissions();
final int n = reqAdmissions.length;
List<List<String>> reqRegNumsList = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
Admissions reqAdmission = reqAdmissions[i];
ProfessionInfo[] reqPis = reqAdmission.getProfessionInfos();
List<String> reqNums = new ArrayList<>(reqPis.length);
reqRegNumsList.add(reqNums);
for (ProfessionInfo reqPi : reqPis) {
String reqNum = reqPi.getRegistrationNumber();
reqNums.add(reqNum);
}
}
values.addExtension(type, admission.getExtensionValue(reqRegNumsList));
occurences.remove(type);
} else {
values.addExtension(type, admission.getExtensionValue(null));
occurences.remove(type);
}
}
// OCSP Nocheck
// processed by the CA
// restriction
type = ObjectIdentifiers.id_extension_restriction;
if (restriction != null) {
if (occurences.remove(type)) {
values.addExtension(type, restriction);
}
}
// AdditionalInformation
type = ObjectIdentifiers.id_extension_additionalInformation;
if (additionalInformation != null) {
if (occurences.remove(type)) {
values.addExtension(type, additionalInformation);
}
}
// ValidityModel
type = ObjectIdentifiers.id_extension_validityModel;
if (validityModel != null) {
if (occurences.remove(type)) {
values.addExtension(type, validityModel);
}
}
// PrivateKeyUsagePeriod
type = Extension.privateKeyUsagePeriod;
if (occurences.contains(type)) {
Date tmpNotAfter;
if (privateKeyUsagePeriod == null) {
tmpNotAfter = notAfter;
} else {
tmpNotAfter = privateKeyUsagePeriod.add(notBefore);
if (tmpNotAfter.after(notAfter)) {
tmpNotAfter = notAfter;
}
}
ASN1EncodableVector vec = new ASN1EncodableVector();
vec.add(new DERTaggedObject(false, 0, new DERGeneralizedTime(notBefore)));
vec.add(new DERTaggedObject(false, 1, new DERGeneralizedTime(tmpNotAfter)));
ExtensionValue extValue = new ExtensionValue(extensionControls.get(type).isCritical(), new DERSequence(vec));
values.addExtension(type, extValue);
occurences.remove(type);
}
// QCStatements
type = Extension.qCStatements;
if (occurences.contains(type) && (qcStatments != null || qcStatementsOption != null)) {
if (qcStatments != null) {
values.addExtension(type, qcStatments);
occurences.remove(type);
} else if (requestedExtensions != null && qcStatementsOption != null) {
// extract the euLimit data from request
Extension extension = requestedExtensions.getExtension(type);
if (extension == null) {
throw new BadCertTemplateException("No QCStatement extension is contained in the request");
}
ASN1Sequence seq = ASN1Sequence.getInstance(extension.getParsedValue());
Map<String, int[]> qcEuLimits = new HashMap<>();
final int n = seq.size();
for (int i = 0; i < n; i++) {
QCStatement stmt = QCStatement.getInstance(seq.getObjectAt(i));
if (!ObjectIdentifiers.id_etsi_qcs_QcLimitValue.equals(stmt.getStatementId())) {
continue;
}
MonetaryValue monetaryValue = MonetaryValue.getInstance(stmt.getStatementInfo());
int amount = monetaryValue.getAmount().intValue();
int exponent = monetaryValue.getExponent().intValue();
Iso4217CurrencyCode currency = monetaryValue.getCurrency();
String currencyS = currency.isAlphabetic() ? currency.getAlphabetic().toUpperCase() : Integer.toString(currency.getNumeric());
qcEuLimits.put(currencyS, new int[] { amount, exponent });
}
ASN1EncodableVector vec = new ASN1EncodableVector();
for (QcStatementOption m : qcStatementsOption) {
if (m.getStatement() != null) {
vec.add(m.getStatement());
continue;
}
MonetaryValueOption monetaryOption = m.getMonetaryValueOption();
String currencyS = monetaryOption.getCurrencyString();
int[] limit = qcEuLimits.get(currencyS);
if (limit == null) {
throw new BadCertTemplateException("no EuLimitValue is specified for currency '" + currencyS + "'");
}
int amount = limit[0];
Range2Type range = monetaryOption.getAmountRange();
if (amount < range.getMin() || amount > range.getMax()) {
throw new BadCertTemplateException("amount for currency '" + currencyS + "' is not within [" + range.getMin() + ", " + range.getMax() + "]");
}
int exponent = limit[1];
range = monetaryOption.getExponentRange();
if (exponent < range.getMin() || exponent > range.getMax()) {
throw new BadCertTemplateException("exponent for currency '" + currencyS + "' is not within [" + range.getMin() + ", " + range.getMax() + "]");
}
MonetaryValue monetaryVale = new MonetaryValue(monetaryOption.getCurrency(), amount, exponent);
QCStatement qcStatment = new QCStatement(m.getStatementId(), monetaryVale);
vec.add(qcStatment);
}
ExtensionValue extValue = new ExtensionValue(extensionControls.get(type).isCritical(), new DERSequence(vec));
values.addExtension(type, extValue);
occurences.remove(type);
} else {
throw new RuntimeException("should not reach here");
}
}
// BiometricData
type = Extension.biometricInfo;
if (occurences.contains(type) && biometricInfo != null) {
Extension extension = (requestedExtensions == null) ? null : requestedExtensions.getExtension(type);
if (extension == null) {
throw new BadCertTemplateException("no biometricInfo extension is contained in the request");
}
ASN1Sequence seq = ASN1Sequence.getInstance(extension.getParsedValue());
final int n = seq.size();
if (n < 1) {
throw new BadCertTemplateException("biometricInfo extension in request contains empty sequence");
}
ASN1EncodableVector vec = new ASN1EncodableVector();
for (int i = 0; i < n; i++) {
BiometricData bd = BiometricData.getInstance(seq.getObjectAt(i));
TypeOfBiometricData bdType = bd.getTypeOfBiometricData();
if (!biometricInfo.isTypePermitted(bdType)) {
throw new BadCertTemplateException("biometricInfo[" + i + "].typeOfBiometricData is not permitted");
}
ASN1ObjectIdentifier hashAlgo = bd.getHashAlgorithm().getAlgorithm();
if (!biometricInfo.isHashAlgorithmPermitted(hashAlgo)) {
throw new BadCertTemplateException("biometricInfo[" + i + "].hashAlgorithm is not permitted");
}
int expHashValueSize;
try {
expHashValueSize = AlgorithmUtil.getHashOutputSizeInOctets(hashAlgo);
} catch (NoSuchAlgorithmException ex) {
throw new CertprofileException("should not happen, unknown hash algorithm " + hashAlgo);
}
byte[] hashValue = bd.getBiometricDataHash().getOctets();
if (hashValue.length != expHashValueSize) {
throw new BadCertTemplateException("biometricInfo[" + i + "].biometricDataHash has incorrect length");
}
DERIA5String sourceDataUri = bd.getSourceDataUri();
switch(biometricInfo.getSourceDataUriOccurrence()) {
case FORBIDDEN:
sourceDataUri = null;
break;
case REQUIRED:
if (sourceDataUri == null) {
throw new BadCertTemplateException("biometricInfo[" + i + "].sourceDataUri is not specified in request but is required");
}
break;
case OPTIONAL:
break;
default:
throw new BadCertTemplateException("could not reach here, unknown tripleState");
}
AlgorithmIdentifier newHashAlg = new AlgorithmIdentifier(hashAlgo, DERNull.INSTANCE);
BiometricData newBiometricData = new BiometricData(bdType, newHashAlg, new DEROctetString(hashValue), sourceDataUri);
vec.add(newBiometricData);
}
ExtensionValue extValue = new ExtensionValue(extensionControls.get(type).isCritical(), new DERSequence(vec));
values.addExtension(type, extValue);
occurences.remove(type);
}
// TlsFeature
type = ObjectIdentifiers.id_pe_tlsfeature;
if (tlsFeature != null) {
if (occurences.remove(type)) {
values.addExtension(type, tlsFeature);
}
}
// AuthorizationTemplate
type = ObjectIdentifiers.id_xipki_ext_authorizationTemplate;
if (authorizationTemplate != null) {
if (occurences.remove(type)) {
values.addExtension(type, authorizationTemplate);
}
}
// SMIME
type = ObjectIdentifiers.id_smimeCapabilities;
if (smimeCapabilities != null) {
if (occurences.remove(type)) {
values.addExtension(type, smimeCapabilities);
}
}
// constant extensions
if (constantExtensions != null) {
for (ASN1ObjectIdentifier m : constantExtensions.keySet()) {
if (!occurences.remove(m)) {
continue;
}
ExtensionValue extensionValue = constantExtensions.get(m);
if (extensionValue != null) {
values.addExtension(m, extensionValue);
}
}
}
ExtensionValues extraExtensions = getExtraExtensions(extensionOccurences, requestedSubject, grantedSubject, requestedExtensions, notBefore, notAfter, caInfo);
if (extraExtensions != null) {
for (ASN1ObjectIdentifier m : extraExtensions.getExtensionTypes()) {
values.addExtension(m, extraExtensions.getExtensionValue(m));
}
}
return values;
}
use of org.omegat.filters3.Attribute in project pwm by pwm-project.
the class StoredConfigurationImpl method writeConfigProperty.
@Override
public void writeConfigProperty(final ConfigurationProperty propertyName, final String value) {
domModifyLock.writeLock().lock();
try {
final XPathExpression xp = XPathBuilder.xpathForConfigProperty(propertyName);
final List<Element> propertyElements = xp.evaluate(document);
for (final Element propertyElement : propertyElements) {
propertyElement.detach();
}
final Element propertyElement = new Element(XML_ELEMENT_PROPERTY);
propertyElement.setAttribute(new Attribute(XML_ATTRIBUTE_KEY, propertyName.getKey()));
propertyElement.setContent(new Text(value));
if (null == XPathBuilder.xpathForConfigProperties().evaluateFirst(document)) {
final Element configProperties = new Element(XML_ELEMENT_PROPERTIES);
configProperties.setAttribute(new Attribute(XML_ATTRIBUTE_TYPE, XML_ATTRIBUTE_VALUE_CONFIG));
document.getRootElement().addContent(configProperties);
}
final XPathExpression xp2 = XPathBuilder.xpathForConfigProperties();
final Element propertiesElement = (Element) xp2.evaluateFirst(document);
propertyElement.setAttribute(XML_ATTRIBUTE_MODIFY_TIME, JavaHelper.toIsoDate(Instant.now()));
propertiesElement.setAttribute(XML_ATTRIBUTE_MODIFY_TIME, JavaHelper.toIsoDate(Instant.now()));
propertiesElement.addContent(propertyElement);
} finally {
domModifyLock.writeLock().unlock();
}
}
Aggregations