Skip to content

Commit c84874e

Browse files
committed
GP: Rework security/protocol policy handling
Simpler API, easier reuse.
1 parent c769c27 commit c84874e

File tree

3 files changed

+68
-9
lines changed

3 files changed

+68
-9
lines changed

globalplatform/src/main/java/org/openjavacard/gp/client/GPCard.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,9 @@ public void connect() throws CardException {
381381
mCardKeyInfo.checkKeysetForUsage(mKeys);
382382

383383
// create a secure channel object
384-
mSecureChannel = new GPSecureChannel(mContext, mBasicChannel, mKeys, mDiversification, mProtocolPolicy, mSecurityPolicy);
384+
mSecureChannel = new GPSecureChannel(mContext, mBasicChannel, mKeys, mDiversification);
385+
mSecureChannel.setProtocolPolicy(mProtocolPolicy);
386+
mSecureChannel.setSecurityPolicy(mSecurityPolicy);
385387

386388
// set protocol expectation of secure channel
387389
if (mCardData != null) {

globalplatform/src/main/java/org/openjavacard/gp/client/GPContext.java

+26
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
package org.openjavacard.gp.client;
2121

22+
import org.openjavacard.gp.scp.SCPProtocolPolicy;
23+
import org.openjavacard.gp.scp.SCPSecurityPolicy;
2224
import org.slf4j.Logger;
2325
import org.slf4j.LoggerFactory;
2426

@@ -28,6 +30,12 @@ public class GPContext {
2830

2931
private boolean mKeyLoggingEnabled = false;
3032

33+
private SCPProtocolPolicy mProtocolPolicy = SCPProtocolPolicy.PERMISSIVE;
34+
private SCPSecurityPolicy mSecurityPolicy = SCPSecurityPolicy.CMAC;
35+
36+
/**
37+
* Main constructor
38+
*/
3139
public GPContext() {
3240
}
3341

@@ -36,6 +44,24 @@ public boolean isKeyLoggingEnabled() {
3644
return mKeyLoggingEnabled;
3745
}
3846

47+
public SCPProtocolPolicy getProtocolPolicy() {
48+
return mProtocolPolicy;
49+
}
50+
51+
public SCPSecurityPolicy getSecurityPolicy() {
52+
return mSecurityPolicy;
53+
}
54+
55+
public void setProtocolPolicy(SCPProtocolPolicy protocolPolicy) {
56+
LOG.info("new protocol policy " + protocolPolicy);
57+
mProtocolPolicy = protocolPolicy;
58+
}
59+
60+
public void setSecurityPolicy(SCPSecurityPolicy securityPolicy) {
61+
LOG.info("new protocol policy " + securityPolicy);
62+
mSecurityPolicy = securityPolicy;
63+
}
64+
3965
/**
4066
* Enable logging of keys
4167
*/

globalplatform/src/main/java/org/openjavacard/gp/scp/GPSecureChannel.java

+39-8
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,11 @@ public class GPSecureChannel extends CardChannel {
6363
private final GPKeySet mStaticKeys;
6464
/** Key diversification to apply */
6565
private final GPKeyDiversification mDiversification;
66+
6667
/** Protocol policy in effect */
67-
private final SCPProtocolPolicy mProtocolPolicy;
68+
private SCPProtocolPolicy mProtocolPolicy;
6869
/** Security policy in effect */
69-
private final SCPSecurityPolicy mSecurityPolicy;
70+
private SCPSecurityPolicy mSecurityPolicy;
7071

7172
/** Expected SCP protocol - 0 means ANY */
7273
private int mExpectedProtocol = 0;
@@ -89,19 +90,19 @@ public class GPSecureChannel extends CardChannel {
8990
* @param context for this secure channel
9091
* @param channel to communicate through
9192
* @param keys to use
92-
* @param protocolPolicy to conform to
93-
* @param securityPolicy to conform to
9493
*/
9594
public GPSecureChannel(GPContext context, CardChannel channel,
96-
GPKeySet keys, GPKeyDiversification diversification,
97-
SCPProtocolPolicy protocolPolicy, SCPSecurityPolicy securityPolicy) {
95+
GPKeySet keys, GPKeyDiversification diversification) {
96+
// final fields
9897
mRandom = new SecureRandom();
9998
mContext = context;
10099
mChannel = channel;
101100
mStaticKeys = keys;
102101
mDiversification = diversification;
103-
mProtocolPolicy = protocolPolicy;
104-
mSecurityPolicy = securityPolicy;
102+
// config fields
103+
mProtocolPolicy = context.getProtocolPolicy();
104+
mSecurityPolicy = context.getSecurityPolicy();
105+
// state fields
105106
reset();
106107
}
107108

@@ -122,11 +123,37 @@ public SCPParameters getActiveProtocol() {
122123
return mActiveProtocol;
123124
}
124125

126+
/** @return the protocol policy in effect on this channel */
127+
public SCPProtocolPolicy getProtocolPolicy() {
128+
return mProtocolPolicy;
129+
}
130+
131+
/** @return the security policy in effect on this channel */
132+
public SCPSecurityPolicy getSecurityPolicy() {
133+
return mSecurityPolicy;
134+
}
135+
125136
/** @return true if the channel is established */
126137
public boolean isEstablished() {
127138
return mIsEstablished;
128139
}
129140

141+
/**
142+
* Set the protocol policy to be used for this channel
143+
* @param protocolPolicy
144+
*/
145+
public void setProtocolPolicy(SCPProtocolPolicy protocolPolicy) {
146+
mProtocolPolicy = protocolPolicy;
147+
}
148+
149+
/**
150+
* Set the security policy to be used for this channel
151+
* @param securityPolicy
152+
*/
153+
public void setSecurityPolicy(SCPSecurityPolicy securityPolicy) {
154+
mSecurityPolicy = securityPolicy;
155+
}
156+
130157
/**
131158
* Inform the secure channel about the protocol to be used
132159
* <p/>
@@ -266,6 +293,10 @@ private ResponseAPDU transmitInternal(CommandAPDU command) throws CardException
266293
public void open() throws CardException {
267294
LOG.debug("opening secure channel");
268295

296+
// log policies
297+
LOG.debug("using protocol policy " + mProtocolPolicy);
298+
LOG.debug("using security policy " + mSecurityPolicy);
299+
269300
// generate the host challenge
270301
byte[] hostChallenge = generateChallenge();
271302

0 commit comments

Comments
 (0)