use of iso.std.iso_iec._24727.tech.schema.DIDAuthenticationDataType in project open-ecard by ecsec.
the class TinySAL method cardApplicationStartSession.
/**
* This CardApplicationStartSession function starts a session between the client application and the card application.
* See BSI-TR-03112-4, version 1.1.2, section 3.2.3.
*
* @param request CardApplicationStartSession
* @return CardApplicationStartSessionResponse
*/
@Publish
@Override
public CardApplicationStartSessionResponse cardApplicationStartSession(CardApplicationStartSession request) {
CardApplicationStartSessionResponse response = WSHelper.makeResponse(CardApplicationStartSessionResponse.class, WSHelper.makeResultOK());
try {
ConnectionHandleType connectionHandle = SALUtils.getConnectionHandle(request);
CardStateEntry cardStateEntry = SALUtils.getCardStateEntry(states, connectionHandle);
byte[] cardApplicationID = connectionHandle.getCardApplication();
String didName = SALUtils.getDIDName(request);
Assert.assertIncorrectParameter(didName, "The parameter didName is empty.");
DIDAuthenticationDataType didAuthenticationProtocolData = request.getAuthenticationProtocolData();
Assert.assertIncorrectParameter(didAuthenticationProtocolData, "The parameter didAuthenticationProtocolData is empty.");
DIDStructureType didStructure = cardStateEntry.getDIDStructure(didName, cardApplicationID);
Assert.assertNamedEntityNotFound(didStructure, "The given DIDName cannot be found.");
Assert.securityConditionApplication(cardStateEntry, cardApplicationID, ConnectionServiceActionName.CARD_APPLICATION_START_SESSION);
String protocolURI = didStructure.getDIDMarker().getProtocol();
SALProtocol protocol = getProtocol(connectionHandle, request.getDIDScope(), protocolURI);
if (protocol.hasNextStep(FunctionType.CardApplicationStartSession)) {
response = protocol.cardApplicationStartSession(request);
removeFinishedProtocol(connectionHandle, protocolURI, protocol);
} else {
throw new InappropriateProtocolForActionException("CardApplicationStartSession", protocol.toString());
}
} catch (ECardException e) {
response.setResult(e.getResult());
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throwThreadKillException(e);
response.setResult(WSHelper.makeResult(e));
}
return response;
}
use of iso.std.iso_iec._24727.tech.schema.DIDAuthenticationDataType in project open-ecard by ecsec.
the class TinySAL method didAuthenticate.
/**
* The DIDAuthenticate function can be used to execute an authentication protocol using a DID addressed by DIDName.
* See BSI-TR-03112-4, version 1.1.2, section 3.6.6.
*
* @param request DIDAuthenticate
* @return DIDAuthenticateResponse
*/
@Publish
@Override
public DIDAuthenticateResponse didAuthenticate(DIDAuthenticate request) {
DIDAuthenticateResponse response = WSHelper.makeResponse(DIDAuthenticateResponse.class, WSHelper.makeResultOK());
try {
ConnectionHandleType connectionHandle = SALUtils.getConnectionHandle(request);
DIDAuthenticationDataType didAuthenticationData = request.getAuthenticationProtocolData();
Assert.assertIncorrectParameter(didAuthenticationData, "The parameter AuthenticationProtocolData is empty.");
String protocolURI = didAuthenticationData.getProtocol();
// FIXME: workaround for missing protocol URI from eID-Servers
if (protocolURI == null) {
LOG.warn("ProtocolURI was null");
protocolURI = ECardConstants.Protocol.EAC_GENERIC;
} else if (protocolURI.equals("urn:oid:1.0.24727.3.0.0.7.2")) {
LOG.warn("ProtocolURI was urn:oid:1.0.24727.3.0.0.7.2");
protocolURI = ECardConstants.Protocol.EAC_GENERIC;
}
didAuthenticationData.setProtocol(protocolURI);
SALProtocol protocol = getProtocol(connectionHandle, request.getDIDScope(), protocolURI);
if (protocol.hasNextStep(FunctionType.DIDAuthenticate)) {
response = protocol.didAuthenticate(request);
removeFinishedProtocol(connectionHandle, protocolURI, protocol);
} else {
throw new InappropriateProtocolForActionException("DIDAuthenticate", protocol.toString());
}
} catch (ECardException e) {
response.setResult(e.getResult());
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throwThreadKillException(e);
response.setResult(WSHelper.makeResult(e));
}
return response;
}
use of iso.std.iso_iec._24727.tech.schema.DIDAuthenticationDataType in project open-ecard by ecsec.
the class AndroidMarshaller method marshal.
@Override
public synchronized Document marshal(Object o) throws MarshallingTypeException {
Document document = documentBuilder.newDocument();
document.setXmlStandalone(true);
Element rootElement = null;
if (o instanceof DestroyChannel) {
DestroyChannel destroyChannel = (DestroyChannel) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
Element emSlotHandle = createElementIso(document, "SlotHandle");
emSlotHandle.appendChild(document.createTextNode(ByteUtils.toHexString(destroyChannel.getSlotHandle())));
rootElement.appendChild(emSlotHandle);
} else if (o instanceof DestroyChannelResponse) {
DestroyChannelResponse response = (DestroyChannelResponse) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
if (response.getProfile() != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(response.getProfile()));
rootElement.appendChild(emProfile);
}
if (response.getRequestID() != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(response.getRequestID()));
rootElement.appendChild(emRequest);
}
if (response.getResult() != null) {
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
}
} else if (o instanceof EstablishChannel) {
EstablishChannel establishChannel = (EstablishChannel) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
Element emSlotHandle = createElementIso(document, "SlotHandle");
emSlotHandle.appendChild(document.createTextNode(ByteUtils.toHexString(establishChannel.getSlotHandle())));
rootElement.appendChild(emSlotHandle);
Element emAuthProtData = createElementIso(document, "AuthenticationProtocolData");
emAuthProtData.setAttribute("Protocol", establishChannel.getAuthenticationProtocolData().getProtocol());
for (Element e : establishChannel.getAuthenticationProtocolData().getAny()) {
Element eClone = createElementIso(document, e.getLocalName());
eClone.setTextContent(e.getTextContent());
eClone.setAttribute("xmlns", "urn:iso:std:iso-iec:24727:tech:schema");
emAuthProtData.appendChild(eClone);
}
if (establishChannel.getProfile() != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(establishChannel.getProfile()));
rootElement.appendChild(emProfile);
}
if (establishChannel.getRequestID() != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(establishChannel.getRequestID()));
rootElement.appendChild(emRequest);
}
rootElement.appendChild(emAuthProtData);
} else if (o instanceof EstablishChannelResponse) {
EstablishChannelResponse response = (EstablishChannelResponse) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
if (response.getProfile() != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(response.getProfile()));
rootElement.appendChild(emProfile);
}
if (response.getRequestID() != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(response.getRequestID()));
rootElement.appendChild(emRequest);
}
if (response.getResult() != null) {
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
}
if (response.getAuthenticationProtocolData() != null) {
Element emAuthProtData = createElementIso(document, "AuthenticationProtocolData");
emAuthProtData.setAttribute("Protocol", response.getAuthenticationProtocolData().getProtocol());
for (Element e : response.getAuthenticationProtocolData().getAny()) {
Element eClone = createElementIso(document, e.getLocalName());
eClone.setTextContent(e.getTextContent());
eClone.setAttribute("xmlns", "urn:iso:std:iso-iec:24727:tech:schema");
emAuthProtData.appendChild(eClone);
}
}
} else if (o instanceof DIDAuthenticate) {
DIDAuthenticate auth = (DIDAuthenticate) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
Element em;
if (auth.getConnectionHandle() != null) {
em = marshalConnectionHandle(auth.getConnectionHandle(), document);
rootElement.appendChild(em);
}
if (auth.getDIDScope() != null) {
em = createElementIso(document, "DIDScope");
em.appendChild(document.createTextNode(auth.getDIDScope().value()));
rootElement.appendChild(em);
}
if (auth.getDIDName() != null) {
em = createElementIso(document, "DIDName");
em.appendChild(document.createTextNode(auth.getDIDName()));
rootElement.appendChild(em);
}
if (auth.getAuthenticationProtocolData() != null) {
DIDAuthenticationDataType d = auth.getAuthenticationProtocolData();
em = createElementIso(document, "AuthenticationProtocolData");
em.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
if (d instanceof EAC1OutputType) {
em.setAttribute("xsi:type", "iso:EAC1OutputType");
} else if (d instanceof EAC2OutputType) {
em.setAttribute("xsi:type", "iso:EAC2OutputType");
} else if (d instanceof EAC1InputType) {
em.setAttribute("xsi:type", "iso:EAC1InputType");
} else if (d instanceof EAC2InputType) {
em.setAttribute("xsi:type", "iso:EAC2InputType");
} else {
String msg = "Marshalling a DIDAuthenticationDataType of " + d.getClass().getName() + " in DIDAuthentication is not supported";
LOG.error(msg);
throw new MarshallingTypeException(msg);
}
for (Element e : d.getAny()) {
Element elemCopy = createElementIso(document, e.getLocalName());
elemCopy.setTextContent(e.getTextContent());
em.appendChild(elemCopy);
}
for (Map.Entry<QName, String> entry : d.getOtherAttributes().entrySet()) {
em.setAttribute(entry.getKey().getNamespaceURI(), entry.getValue());
}
if (d.getProtocol() != null) {
em.setAttribute("Protocol", d.getProtocol());
}
rootElement.appendChild(em);
}
if (auth.getSAMConnectionHandle() != null) {
em = marshalConnectionHandle(auth.getSAMConnectionHandle(), document);
rootElement.appendChild(em);
}
if (auth.getProfile() != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(auth.getProfile()));
rootElement.appendChild(emProfile);
}
if (auth.getRequestID() != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(auth.getRequestID()));
rootElement.appendChild(emRequest);
}
} else if (o instanceof DIDAuthenticateResponse) {
DIDAuthenticateResponse didAuthenticateResponse = (DIDAuthenticateResponse) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
rootElement.appendChild(marshalResult(didAuthenticateResponse.getResult(), document));
if (didAuthenticateResponse.getAuthenticationProtocolData() != null) {
DIDAuthenticationDataType didAuthenticationDataType = didAuthenticateResponse.getAuthenticationProtocolData();
Element elemEACOutput = createElementIso(document, "AuthenticationProtocolData");
elemEACOutput.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
if (didAuthenticationDataType instanceof EAC1OutputType) {
elemEACOutput.setAttribute("xsi:type", "iso:EAC1OutputType");
} else if (didAuthenticationDataType instanceof EAC2OutputType) {
elemEACOutput.setAttribute("xsi:type", "iso:EAC2OutputType");
} else {
String msg = "Marshalling a DIDAuthenticationDataType of " + didAuthenticationDataType.getClass().getName() + " in DIDAuthentication is not supported";
throw new MarshallingTypeException(msg);
}
for (Element e : didAuthenticationDataType.getAny()) {
Element elemCopy = createElementIso(document, e.getLocalName());
elemCopy.setTextContent(e.getTextContent());
elemEACOutput.appendChild(elemCopy);
}
rootElement.appendChild(elemEACOutput);
}
// else only the result (with error) is returned
} else if (o instanceof InitializeFrameworkResponse) {
InitializeFrameworkResponse initializeFrameworkResponse = (InitializeFrameworkResponse) o;
rootElement = createElementEcapi(document, o.getClass().getSimpleName());
rootElement.appendChild(marshalResult(initializeFrameworkResponse.getResult(), document));
Element emVersion = createElementEcapi(document, "Version");
Element emMajor = createElementEcapi(document, "Major");
emMajor.appendChild(document.createTextNode(initializeFrameworkResponse.getVersion().getMajor().toString()));
emVersion.appendChild(emMajor);
Element emMinor = createElementEcapi(document, "Minor");
emMinor.appendChild(document.createTextNode(initializeFrameworkResponse.getVersion().getMinor().toString()));
emVersion.appendChild(emMinor);
Element emSubMinor = createElementEcapi(document, "SubMinor");
emSubMinor.appendChild(document.createTextNode(initializeFrameworkResponse.getVersion().getSubMinor().toString()));
emVersion.appendChild(emSubMinor);
rootElement.appendChild(emVersion);
} else if (o instanceof InternationalStringType) {
InternationalStringType internationalStringType = (InternationalStringType) o;
rootElement = marshalInternationStringType(internationalStringType, document, internationalStringType.getClass().getSimpleName());
} else if (o instanceof Result) {
Result r = (Result) o;
rootElement = marshalResult(r, document);
} else if (o instanceof iso.std.iso_iec._24727.tech.schema.StartPAOS) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
StartPAOS startPAOS = (StartPAOS) o;
Element em = createElementIso(document, "SessionIdentifier");
em.appendChild(document.createTextNode(startPAOS.getSessionIdentifier()));
rootElement.appendChild(em);
rootElement.appendChild(marshalConnectionHandle(startPAOS.getConnectionHandle().get(0), document));
} else if (o instanceof TransmitResponse) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
TransmitResponse transmitResponsePOJO = (TransmitResponse) o;
Element em = marshalResult(transmitResponsePOJO.getResult(), document);
rootElement.appendChild(em);
for (int i = 0; i < transmitResponsePOJO.getOutputAPDU().size(); i++) {
em = createElementIso(document, "OutputAPDU");
em.appendChild(document.createTextNode(ByteUtils.toHexString(transmitResponsePOJO.getOutputAPDU().get(i))));
rootElement.appendChild(em);
}
} else if (o instanceof EstablishContext) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
} else if (o instanceof EstablishContextResponse) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
EstablishContextResponse establishContextResponse = (EstablishContextResponse) o;
Element em = createElementIso(document, "ContextHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(establishContextResponse.getContextHandle())));
rootElement.appendChild(em);
em = marshalResult(establishContextResponse.getResult(), document);
rootElement.appendChild(em);
} else if (o instanceof GetStatus) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
GetStatus getStatus = (GetStatus) o;
Element em = createElementIso(document, "ContextHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(getStatus.getContextHandle())));
rootElement.appendChild(em);
if (getStatus.getIFDName() != null) {
em = createElementIso(document, "IFDName");
em.appendChild(document.createTextNode(getStatus.getIFDName()));
rootElement.appendChild(em);
}
} else if (o instanceof Wait) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
Wait w = (Wait) o;
Element em = createElementIso(document, "ContextHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(w.getContextHandle())));
rootElement.appendChild(em);
if (w.getTimeOut() != null) {
em = createElementIso(document, "TimeOut");
em.appendChild(document.createTextNode(w.getTimeOut().toString(16)));
rootElement.appendChild(em);
}
if (w.getCallback() != null) {
ChannelHandleType callback = w.getCallback();
em = createElementIso(document, "Callback");
if (callback.getBinding() != null) {
Element em2 = createElementIso(document, "Binding");
em2.appendChild(document.createTextNode(callback.getBinding()));
em.appendChild(em2);
}
if (callback.getSessionIdentifier() != null) {
Element em2 = createElementIso(document, "SessionIdentifier");
em2.appendChild(document.createTextNode(callback.getSessionIdentifier()));
em.appendChild(em2);
}
if (callback.getProtocolTerminationPoint() != null) {
Element em2 = createElementIso(document, "ProtocolTerminationPoint");
em2.appendChild(document.createTextNode(callback.getProtocolTerminationPoint()));
em.appendChild(em2);
}
if (callback.getPathSecurity() != null) {
PathSecurityType pathSecurityType = callback.getPathSecurity();
Element em2 = createElementIso(document, "PathSecurity");
Element em3 = createElementIso(document, "Protocol");
em3.appendChild(document.createTextNode(pathSecurityType.getProtocol()));
em2.appendChild(em3);
if (pathSecurityType.getParameters() != null) {
em3 = createElementIso(document, "Parameters");
em3.appendChild(document.createTextNode(pathSecurityType.getParameters().toString()));
em2.appendChild(em3);
}
em.appendChild(em2);
}
rootElement.appendChild(em);
}
} else if (o instanceof Connect) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
Connect c = (Connect) o;
Element em = createElementIso(document, "ContextHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(c.getContextHandle())));
rootElement.appendChild(em);
em = createElementIso(document, "IFDName");
em.appendChild(document.createTextNode(c.getIFDName()));
rootElement.appendChild(em);
em = createElementIso(document, "Slot");
em.appendChild(document.createTextNode(c.getSlot().toString()));
rootElement.appendChild(em);
if (c.isExclusive() != null) {
em = createElementIso(document, "Exclusive");
em.appendChild(document.createTextNode(c.isExclusive().toString()));
rootElement.appendChild(em);
}
} else if (o instanceof ConnectResponse) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
ConnectResponse cr = (ConnectResponse) o;
Element em = createElementIso(document, "SlotHandle");
if (cr.getSlotHandle() != null) {
em.appendChild(document.createTextNode(ByteUtils.toHexString(cr.getSlotHandle())));
rootElement.appendChild(em);
}
em = marshalResult(cr.getResult(), document);
rootElement.appendChild(em);
} else if (o instanceof ListIFDs) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
ListIFDs c = (ListIFDs) o;
Element em = createElementIso(document, "ContextHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(c.getContextHandle())));
rootElement.appendChild(em);
} else if (o instanceof ListIFDsResponse) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
ListIFDsResponse listIFDsResponse = (ListIFDsResponse) o;
for (String s : listIFDsResponse.getIFDName()) {
Element em = createElementIso(document, "IFDName");
em.appendChild(document.createTextNode(s));
rootElement.appendChild(em);
}
Element em = marshalResult(listIFDsResponse.getResult(), document);
rootElement.appendChild(em);
} else if (o instanceof Transmit) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
rootElement.setAttribute("xmlns:iso", "urn:iso:std:iso-iec:24727:tech:schema");
Transmit t = (Transmit) o;
Element em = createElementIso(document, "SlotHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(t.getSlotHandle())));
rootElement.appendChild(em);
for (int i = 0; i < t.getInputAPDUInfo().size(); i++) {
em = createElementIso(document, "InputAPDUInfo");
rootElement.appendChild(em);
Element em2 = createElementIso(document, "InputAPDU");
em2.appendChild(document.createTextNode(ByteUtils.toHexString(t.getInputAPDUInfo().get(i).getInputAPDU())));
em.appendChild(em2);
for (int y = 0; y < t.getInputAPDUInfo().get(i).getAcceptableStatusCode().size(); y++) {
em2 = createElementIso(document, "AcceptableStatusCode");
em2.appendChild(document.createTextNode(ByteUtils.toHexString(t.getInputAPDUInfo().get(i).getAcceptableStatusCode().get(y))));
em.appendChild(em2);
}
}
} else if (o instanceof RecognitionTree) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
RecognitionTree recognitionTree = (RecognitionTree) o;
for (CardCall c : recognitionTree.getCardCall()) {
rootElement.appendChild(marshalCardCall(c, document));
}
} else if (o instanceof CardCall) {
CardCall c = (CardCall) o;
rootElement = (Element) marshalCardCall(c, document);
} else if (o instanceof Disconnect) {
Disconnect d = (Disconnect) o;
rootElement = createElementIso(document, d.getClass().getSimpleName());
Element em = createElementIso(document, "SlotHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(d.getSlotHandle())));
rootElement.appendChild(em);
if (d.getAction() != null) {
em = createElementIso(document, "Action");
em.appendChild(document.createTextNode(d.getAction().value()));
}
} else if (o instanceof DisconnectResponse) {
rootElement = createElementIso(document, o.getClass().getSimpleName());
DisconnectResponse response = (DisconnectResponse) o;
String profile = response.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = response.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
} else if (o instanceof GetIFDCapabilities) {
GetIFDCapabilities getIFDCapabilities = (GetIFDCapabilities) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
Element emContextHandle = createElementIso(document, "ContextHandle");
emContextHandle.appendChild(document.createTextNode(ByteUtils.toHexString(getIFDCapabilities.getContextHandle())));
rootElement.appendChild(emContextHandle);
Element emIFDName = createElementIso(document, "IFDName");
emIFDName.appendChild(document.createTextNode(getIFDCapabilities.getIFDName()));
rootElement.appendChild(emIFDName);
} else if (o instanceof GetIFDCapabilitiesResponse) {
try {
GetIFDCapabilitiesResponse response = (GetIFDCapabilitiesResponse) o;
rootElement = createElementIso(document, o.getClass().getSimpleName());
String profile = response.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = response.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
if (response.getIFDCapabilities() != null) {
Element emIFDCaps = marshalIFDCapabilities(response.getIFDCapabilities(), document);
rootElement.appendChild(emIFDCaps);
}
} catch (Exception ex) {
LOG.error(ex.getMessage(), ex);
}
} else if (o instanceof TCTokenType) {
TCTokenType tctoken = (TCTokenType) o;
rootElement = document.createElement(o.getClass().getSimpleName());
Element em = document.createElement("ServerAddress");
em.appendChild(document.createTextNode(tctoken.getServerAddress()));
rootElement.appendChild(em);
em = document.createElement("SessionIdentifier");
em.appendChild(document.createTextNode(tctoken.getSessionIdentifier()));
rootElement.appendChild(em);
em = document.createElement("RefreshAddress");
em.appendChild(document.createTextNode(tctoken.getRefreshAddress()));
rootElement.appendChild(em);
// Optional element CommunicationErrorAddress
String communicationErrorAddress = tctoken.getCommunicationErrorAddress();
if (communicationErrorAddress != null) {
em = document.createElement("CommunicationErrorAddress");
em.appendChild(document.createTextNode(tctoken.getCommunicationErrorAddress()));
rootElement.appendChild(em);
}
em = document.createElement("Binding");
em.appendChild(document.createTextNode(tctoken.getBinding()));
rootElement.appendChild(em);
// Optional element PathSecurity-Protocol
String pathSecurityProtocol = tctoken.getPathSecurityProtocol();
if (pathSecurityProtocol != null) {
em = document.createElement("PathSecurity-Protocol");
em.appendChild(document.createTextNode(tctoken.getPathSecurityProtocol()));
rootElement.appendChild(em);
}
// Optional element PathSecurity-Parameters
TCTokenType.PathSecurityParameters pathSecurityParameters = tctoken.getPathSecurityParameters();
if (pathSecurityParameters != null) {
em = document.createElement("PSK");
em.appendChild(document.createTextNode(ByteUtils.toHexString(pathSecurityParameters.getPSK())));
Element em1 = document.createElement("PathSecurity-Parameters");
em1.appendChild(em);
rootElement.appendChild(em1);
}
} else if (o instanceof CardApplicationPath) {
CardApplicationPath p = (CardApplicationPath) o;
rootElement = createElementIso(document, "CardApplicationPath");
Element em = createElementIso(document, "CardAppPathRequest");
String profile = p.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = p.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
// ChannelHandle
ChannelHandleType h = p.getCardAppPathRequest().getChannelHandle();
Element emChild = createElementIso(document, "ChannelHandle");
em.appendChild(emChild);
Element emChildOfCH;
if (h.getProtocolTerminationPoint() != null) {
emChildOfCH = createElementIso(document, "ProtocolTerminationPoint");
emChildOfCH.appendChild(document.createTextNode(h.getProtocolTerminationPoint()));
emChild.appendChild(emChildOfCH);
}
if (h.getSessionIdentifier() != null) {
emChildOfCH = createElementIso(document, "SessionIdentifier");
emChildOfCH.appendChild(document.createTextNode(h.getSessionIdentifier()));
emChild.appendChild(emChildOfCH);
}
if (h.getBinding() != null) {
emChildOfCH = createElementIso(document, "Binding");
emChildOfCH.appendChild(document.createTextNode(h.getBinding()));
emChild.appendChild(emChildOfCH);
}
PathSecurityType ps = h.getPathSecurity();
if (ps != null) {
emChildOfCH = createElementIso(document, "PathSecurity");
Element emChildOfPS = createElementIso(document, "Protocol");
emChildOfPS.appendChild(document.createTextNode(ps.getProtocol()));
emChildOfCH.appendChild(emChildOfPS);
// TODO here any type parsen
LOG.error("AnyType of CardApplicationPath: " + ps.getParameters().toString());
emChild.appendChild(emChildOfCH);
}
// context handle
emChild = createElementIso(document, "ContextHandle");
emChild.appendChild(document.createTextNode(ByteUtils.toHexString(p.getCardAppPathRequest().getContextHandle())));
em.appendChild(emChild);
// IFDName
emChild = createElementIso(document, "IFDName");
emChild.appendChild(document.createTextNode(p.getCardAppPathRequest().getIFDName()));
em.appendChild(emChild);
// SlotIndex
emChild = createElementIso(document, "SlotIndex");
emChild.appendChild(document.createTextNode(p.getCardAppPathRequest().getSlotIndex().toString()));
em.appendChild(emChild);
// Card Application
emChild = createElementIso(document, "CardApplication");
emChild.appendChild(document.createTextNode(ByteUtils.toHexString(p.getCardAppPathRequest().getCardApplication())));
em.appendChild(emChild);
rootElement.appendChild(em);
} else if (o instanceof CardApplicationPathResponse) {
CardApplicationPathResponse resp = (CardApplicationPathResponse) o;
rootElement = createElementIso(document, "CardApplicationPathResponse");
String profile = resp.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = resp.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
Result result = resp.getResult();
if (result != null) {
Element emResult = marshalResult(resp.getResult(), document);
rootElement.appendChild(emResult);
}
Element em = createElementIso(document, "CardAppPathResultSet");
for (CardApplicationPathType path : resp.getCardAppPathResultSet().getCardApplicationPathResult()) {
em.appendChild(marshalCardApplicationPathResult(path, document, "CardAppPathRequest"));
}
rootElement.appendChild(em);
} else if (o instanceof BeginTransaction) {
BeginTransaction t = (BeginTransaction) o;
rootElement = createElementIso(document, "BeginTransaction");
Element em = createElementIso(document, "SlotHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(t.getSlotHandle())));
rootElement.appendChild(em);
} else if (o instanceof BeginTransactionResponse) {
BeginTransactionResponse response = (BeginTransactionResponse) o;
rootElement = createElementIso(document, "BeginTransactionResponse");
String profile = response.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = response.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
} else if (o instanceof EndTransaction) {
EndTransaction end = (EndTransaction) o;
rootElement = createElementIso(document, "EndTransaction");
Element em = createElementIso(document, "SlotHandle");
em.appendChild(document.createTextNode(ByteUtils.toHexString(end.getSlotHandle())));
rootElement.appendChild(em);
} else if (o instanceof EndTransactionResponse) {
EndTransactionResponse response = (EndTransactionResponse) o;
rootElement = createElementIso(document, "EndTransactionResponse");
String profile = response.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = response.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
} else if (o instanceof CardApplicationConnect) {
CardApplicationConnect c = (CardApplicationConnect) o;
rootElement = createElementIso(document, "CardApplicationConnect");
// Card Application Path
rootElement.appendChild(marshalCardApplicationPathResult(c.getCardApplicationPath(), document, "CardApplicationPath"));
Element em;
if (c.getOutput() != null) {
em = createElementIso(document, "Output");
em.appendChild(marshalOutput(c.getOutput(), document));
rootElement.appendChild(em);
}
// Exclusive Use
if (c.isExclusiveUse() != null) {
em = createElementIso(document, "ExclusiveUse");
em.appendChild(document.createTextNode(Boolean.toString(c.isExclusiveUse())));
rootElement.appendChild(em);
}
} else if (o instanceof CardApplicationConnectResponse) {
CardApplicationConnectResponse resp = (CardApplicationConnectResponse) o;
rootElement = createElementIso(document, "CardApplicationConnectResponse");
appendResponseValues(resp.getProfile(), resp.getRequestID(), resp.getResult(), rootElement, document);
ConnectionHandleType ch = resp.getConnectionHandle();
if (ch != null) {
Element em = marshalConnectionHandle(ch, document);
rootElement.appendChild(em);
}
} else if (o instanceof CardApplicationDisconnect) {
CardApplicationDisconnect c = (CardApplicationDisconnect) o;
rootElement = createElementIso(document, "CardApplicationDisconnect");
if (c.getConnectionHandle() != null) {
rootElement.appendChild(marshalConnectionHandle(c.getConnectionHandle(), document));
}
if (c.getAction() != null) {
Element em = createElementIso(document, "Action");
em.appendChild(document.createTextNode(c.getAction().value()));
rootElement.appendChild(em);
}
String profile = c.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = c.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
} else if (o instanceof CardApplicationDisconnectResponse) {
CardApplicationDisconnectResponse response = (CardApplicationDisconnectResponse) o;
rootElement = createElementIso(document, "CardApplicationDisconnectResponse");
String profile = response.getProfile();
if (profile != null) {
Element emProfile = createElementIso(document, "Profile");
emProfile.appendChild(document.createTextNode(profile));
rootElement.appendChild(emProfile);
}
String requestID = response.getRequestID();
if (requestID != null) {
Element emRequest = createElementIso(document, "RequestID");
emRequest.appendChild(document.createElement(requestID));
rootElement.appendChild(emRequest);
}
if (response.getResult() != null) {
Element emResult = marshalResult(response.getResult(), document);
rootElement.appendChild(emResult);
}
} else {
throw new IllegalArgumentException("Cannot marshal " + o.getClass().getSimpleName());
}
document.appendChild(rootElement);
return document;
}
use of iso.std.iso_iec._24727.tech.schema.DIDAuthenticationDataType in project open-ecard by ecsec.
the class AndroidMarshallerTest method testConversionOfDIDAuthenticateResponsePACE.
@Test
public void testConversionOfDIDAuthenticateResponsePACE() throws Exception {
WSMarshaller m = new AndroidMarshaller();
DIDAuthenticateResponse didAuthResponse = new DIDAuthenticateResponse();
Result r = new Result();
r.setResultMajor("major");
r.setResultMinor("minor");
InternationalStringType internationalStringType = new InternationalStringType();
internationalStringType.setLang("en");
internationalStringType.setValue("message");
r.setResultMessage(internationalStringType);
didAuthResponse.setResult(r);
EAC1OutputType didAuthenticationDataType = new EAC1OutputType();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document d = builder.newDocument();
Element e = d.createElementNS("urn:iso:std:iso-iec:24727:tech:schema", "RetryCounter");
e.setTextContent("3");
didAuthenticationDataType.getAny().add(e);
e = d.createElementNS("urn:iso:std:iso-iec:24727:tech:schema", "CertificateHolderAuthorizationTemplate");
e.setTextContent("7F4C12060904007F00070301020253050001009800");
didAuthenticationDataType.getAny().add(e);
e = d.createElementNS("urn:iso:std:iso-iec:24727:tech:schema", "CertificationAuthorityReference");
e.setTextContent("ZZCVCAATA0001");
didAuthenticationDataType.getAny().add(e);
e = d.createElementNS("urn:iso:std:iso-iec:24727:tech:schema", "EFCardAccess");
e.setTextContent("31820264300D060804007F0007020202020102300F060A04007F00070202030202020102300F060A04007F00070202040202020101302F060804007F0007020206162341775420655041202D2042447220476D6248202D20546573746B617274652076312E303081FE060904007F0007020203023081F0060B04007F00070101050202023081E0020101302C06072A8648CE3D0101022100A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537730440420A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E53740420662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04044104A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F42D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE022100A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A70201013081FE060904007F0007020204023081F0060B04007F00070101050202023081E0020101302C06072A8648CE3D0101022100A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537730440420A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E53740420662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04044104A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F42D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE022100A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7020101");
didAuthenticationDataType.getAny().add(e);
e = d.createElementNS("urn:iso:std:iso-iec:24727:tech:schema", "IDPICC");
e.setTextContent("4F5311EC8F92D60040EA63365E2B06C832856CDE1CE5F8B3C7E7696DAD7628BD");
didAuthenticationDataType.getAny().add(e);
didAuthResponse.setAuthenticationProtocolData(didAuthenticationDataType);
marshalLog(didAuthResponse);
Document doc = m.marshal(didAuthResponse);
String s = m.doc2str(doc);
LOG.debug(s);
StringReader sr = new StringReader(s);
DIDAuthenticateResponse didaresp = JAXB.unmarshal(sr, DIDAuthenticateResponse.class);
marshalLog(didaresp);
}
use of iso.std.iso_iec._24727.tech.schema.DIDAuthenticationDataType in project open-ecard by ecsec.
the class MarshalTest method testConversionOfDIDAuthenticatResponseAndInitializeFrameworkResponse.
@Test
public void testConversionOfDIDAuthenticatResponseAndInitializeFrameworkResponse() throws MarshallingTypeException, TransformerException, SOAPException, ParserConfigurationException {
JAXBMarshaller m = new JAXBMarshaller();
DIDAuthenticateResponse didAuthenticateResponse = new DIDAuthenticateResponse();
Result r = new Result();
r.setResultMajor("major");
r.setResultMinor("minor");
InternationalStringType internationalStringType = new InternationalStringType();
internationalStringType.setLang("en");
internationalStringType.setValue("message");
r.setResultMessage(internationalStringType);
didAuthenticateResponse.setResult(r);
EAC2OutputType didAuthenticationDataType = new EAC2OutputType();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document d = builder.newDocument();
Element e = d.createElementNS("urn:iso:std:iso-iec:24727:tech:schema", "Signature");
e.setTextContent("7117D7BF95D8D6BD437A0D43DE48F42528273A98F2605758D6A3A2BFC38141E7577CABB4F8FBC8DF152E3A097D1B3A703597331842425FE4A9D0F1C9067AC4A9");
didAuthenticationDataType.getAny().add(e);
didAuthenticateResponse.setAuthenticationProtocolData(didAuthenticationDataType);
Document doc = m.marshal(didAuthenticateResponse);
// test ok if this works
System.out.println(m.doc2str(doc));
InitializeFrameworkResponse initializeFrameworkResponse = new InitializeFrameworkResponse();
Version version = new Version();
version.setMajor(new BigInteger("11"));
version.setMinor(new BigInteger("22"));
version.setSubMinor(new BigInteger("33"));
initializeFrameworkResponse.setVersion(version);
r.setResultMessage(internationalStringType);
initializeFrameworkResponse.setResult(r);
doc = m.marshal(initializeFrameworkResponse);
// test ok if this works
System.out.println(m.doc2str(doc));
}
Aggregations