Skip to content

Commit f49caab

Browse files
committed
We can truly check modern format
1 parent 5dfd475 commit f49caab

File tree

3 files changed

+46
-20
lines changed

3 files changed

+46
-20
lines changed

src/main/java/org/codehaus/plexus/components/secdispatcher/SecDispatcher.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,21 @@ public interface SecDispatcher {
6464
String decrypt(String str) throws SecDispatcherException, IOException;
6565

6666
/**
67-
* Returns {@code true} if passed in string is POSSIBLY encrypted string. Forms of encrypted strings are:
68-
* <ul>
69-
* <li>Legacy: {jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</li>
70-
* <li>Current: {[name=master,cipher=AES/GCM/NoPadding,version=4.0]vvq66pZ7rkvzSPStGTI9q4QDnsmuDwo+LtjraRel2b0XpcGJFdXcYAHAS75HUA6GLpcVtEkmyQ==}</li>
71-
* </ul>
67+
* Returns {@code true} if passed in string adheres to "encrypted string" format (current or legacy).
68+
*
69+
* @since 4.0.1
70+
*/
71+
default boolean isAnyEncryptedString(String str) {
72+
return isEncryptedString(str) || isLegacyEncryptedString(str);
73+
}
74+
75+
/**
76+
* Returns {@code true} if passed in string adheres "encrypted string" format.
7277
*/
7378
boolean isEncryptedString(String str);
7479

7580
/**
76-
* Returns {@code true} if method {@link #isEncryptedString(String)} returns {@code true} with passed in string, and
77-
* there are no attributes detected. In other words, returns {@code true} if passed in string contains
78-
* "legacy" (Maven3 kind) password.
81+
* Returns {@code true} if passed in string adheres to "legacy encrypted string" format.
7982
*/
8083
boolean isLegacyEncryptedString(String str);
8184

src/main/java/org/codehaus/plexus/components/secdispatcher/internal/DefaultSecDispatcher.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,21 +145,43 @@ public String decrypt(String str) throws SecDispatcherException, IOException {
145145
return dispatcher.decrypt(strip(bare), attr, prepareDispatcherConfig(name));
146146
}
147147

148+
/**
149+
* <ul>
150+
* <li>Current: {[name=master,cipher=AES/GCM/NoPadding,version=4.0]vvq66pZ7rkvzSPStGTI9q4QDnsmuDwo+LtjraRel2b0XpcGJFdXcYAHAS75HUA6GLpcVtEkmyQ==}</li>
151+
* </ul>
152+
*/
148153
@Override
149154
public boolean isEncryptedString(String str) {
150-
return str != null
155+
boolean looksLike = str != null
151156
&& !str.isBlank()
152157
&& str.startsWith(SHIELD_BEGIN)
153158
&& str.endsWith(SHIELD_END)
154159
&& !unDecorate(str).contains(SHIELD_BEGIN)
155160
&& !unDecorate(str).contains(SHIELD_END);
161+
if (looksLike) {
162+
Map<String, String> attributes = stripAttributes(unDecorate(str));
163+
return attributes.containsKey(DISPATCHER_NAME_ATTR) && attributes.containsKey(DISPATCHER_VERSION_ATTR);
164+
}
165+
return false;
156166
}
157167

168+
/**
169+
* <ul>
170+
* <li>Legacy: {jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</li>
171+
* </ul>
172+
*/
158173
@Override
159174
public boolean isLegacyEncryptedString(String str) {
160-
if (!isEncryptedString(str)) return false;
161-
Map<String, String> attr = requireNonNull(stripAttributes(unDecorate(str)));
162-
return !attr.containsKey(DISPATCHER_NAME_ATTR);
175+
boolean looksLike = str != null
176+
&& !str.isBlank()
177+
&& str.startsWith(SHIELD_BEGIN)
178+
&& str.endsWith(SHIELD_END)
179+
&& !unDecorate(str).contains(SHIELD_BEGIN)
180+
&& !unDecorate(str).contains(SHIELD_END);
181+
if (looksLike) {
182+
return stripAttributes(unDecorate(str)).isEmpty();
183+
}
184+
return false;
163185
}
164186

165187
@Override

src/test/java/org/codehaus/plexus/components/secdispatcher/internal/DefaultSecDispatcherTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,28 +114,29 @@ void validate() throws Exception {
114114
@Test
115115
void detection() {
116116
SecDispatcher secDispatcher = construct();
117-
assertFalse(secDispatcher.isEncryptedString(null));
118-
assertFalse(secDispatcher.isEncryptedString(""));
119-
assertFalse(secDispatcher.isEncryptedString("foo"));
117+
assertFalse(secDispatcher.isAnyEncryptedString(null));
118+
assertFalse(secDispatcher.isAnyEncryptedString(""));
119+
assertFalse(secDispatcher.isAnyEncryptedString("foo"));
120120

121-
assertTrue(secDispatcher.isEncryptedString("{foo}"));
121+
assertFalse(secDispatcher.isEncryptedString("{foo}"));
122122
assertTrue(secDispatcher.isLegacyEncryptedString("{foo}"));
123123

124-
assertTrue(secDispatcher.isEncryptedString("{12345678901234567890123456789012345678901234567890}"));
124+
assertFalse(secDispatcher.isEncryptedString("{12345678901234567890123456789012345678901234567890}"));
125125
assertTrue(secDispatcher.isLegacyEncryptedString("{12345678901234567890123456789012345678901234567890}"));
126126

127+
// contains {} in the middle
127128
assertFalse(secDispatcher.isEncryptedString("{KDvsYOFLlX{}gH4LU8tvpzAGg5otiosZXvfdQq0yO86LU=}"));
128129
assertFalse(secDispatcher.isLegacyEncryptedString("{KDvsYOFLlX{}gH4LU8tvpzAGg5otiosZXvfdQq0yO86LU=}"));
129130

130-
assertTrue(secDispatcher.isEncryptedString("{KDvsYOFLlXgH4LU8tvpzAGg5otiosZXvfdQq0yO86LU=}"));
131+
assertFalse(secDispatcher.isEncryptedString("{KDvsYOFLlXgH4LU8tvpzAGg5otiosZXvfdQq0yO86LU=}"));
131132
assertTrue(secDispatcher.isLegacyEncryptedString("{KDvsYOFLlXgH4LU8tvpzAGg5otiosZXvfdQq0yO86LU=}"));
132133

133134
assertTrue(
134135
secDispatcher.isEncryptedString(
135-
"{[name=master,cipher=AES/GCM/NoPadding,a=b]vvq66pZ7rkvzSPStGTI9q4QDnsmuDwo+LtjraRel2b0XpcGJFdXcYAHAS75HUA6GLpcVtEkmyQ==}"));
136+
"{[name=master,cipher=AES/GCM/NoPadding,version=4.0,a=b]vvq66pZ7rkvzSPStGTI9q4QDnsmuDwo+LtjraRel2b0XpcGJFdXcYAHAS75HUA6GLpcVtEkmyQ==}"));
136137
assertFalse(
137138
secDispatcher.isLegacyEncryptedString(
138-
"{[name=master,cipher=AES/GCM/NoPadding,a=b]vvq66pZ7rkvzSPStGTI9q4QDnsmuDwo+LtjraRel2b0XpcGJFdXcYAHAS75HUA6GLpcVtEkmyQ==}"));
139+
"{[name=master,cipher=AES/GCM/NoPadding,version=4.0,a=b]vvq66pZ7rkvzSPStGTI9q4QDnsmuDwo+LtjraRel2b0XpcGJFdXcYAHAS75HUA6GLpcVtEkmyQ==}"));
139140
}
140141

141142
protected void roundtrip() throws Exception {

0 commit comments

Comments
 (0)