Remove RsaKeysHolder
This commit is contained in:
@@ -21,7 +21,6 @@ services:
|
|||||||
image: registry.gitlab.com/packmate/packmate:${BUILD_TAG:-latest}
|
image: registry.gitlab.com/packmate/packmate:${BUILD_TAG:-latest}
|
||||||
volumes:
|
volumes:
|
||||||
- "./pcaps/:/app/pcaps/:ro"
|
- "./pcaps/:/app/pcaps/:ro"
|
||||||
- "./rsa_keys/:/app/rsa_keys/:ro"
|
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDWJO65om/5LMA0
|
|
||||||
8w9Uk36h4ukQ7Qt8nbpbeHzxorl4lGwWBASEAEmDYNUcGO0CxglOE93F9BPNGn6q
|
|
||||||
Vj8Ypp3kcTGOzsXcFrd0wRpXbSwbynnmqTCYigiLzIidasfUrGul4s1fVZFdkQZS
|
|
||||||
p2Y5pEUxq1GKcAgCVwjMyWC1dhGqvTcA5ps0JoSRoA+Nzs/BeTHlTm8UvT9eD9ER
|
|
||||||
8RmYVOi1edcJ/eztj1CVydq5X27QNmwLuqsAwq38I27nlq1NU5ShqDQ16bg8IY/c
|
|
||||||
Ll4QJB7SVbrLf3dJ7KY5i7DNEoYUiJGRwDJZt+wcZLtFSzj0cn0BuEU6M0PYglUI
|
|
||||||
uQTeosUZAgMBAAECggEAehq7CJyHzoPm4QpLDoW/qh1RmfYgG6FwVqHgVIPdz9SJ
|
|
||||||
wQ/vZzkmscPwIEJSOsejHKMVTL983vGhkgz1k1/GHjEw+eYLShCl8Ov+0iUNBpew
|
|
||||||
ZIbKj9/9OYGZ0HDHmwvpocAuLJME/V4pRc3v6yQw1D6EkzSITJVGDkcxXqcBMeIA
|
|
||||||
uNVr+pwLH9vO7ybva+e3T4ROWxlecHrcB94THops4fy5+SGVILwvKaP4cRhjLfD4
|
|
||||||
2XV4O5N0imdPAYsNNHyHbAzjvZPoCOsuH3B/tWmRHq3oOa4ZcFUNTDmO9GgfbtY/
|
|
||||||
PHEFV34XxMjy3bK0vLxHqS9CEj1cvfq8e1NqkDTugQKBgQD6CEezGf9OFb3byBui
|
|
||||||
X3OzXWdWQ5jnodOTPb/P+y9DrORJPy1/0BcXh/cHF58kNDZvzVwTFcAjfx6bxS41
|
|
||||||
JAddFRZjNuHXEOtFRkD3Wp4W7Atrv/yeKbpE9PCaNYtUDasL8RKcdJiHNFpN4xRl
|
|
||||||
jpQtIiQ9pikrjUXLgW0S88zzyQKBgQDbQV+DMxGS2Cee6nfMmUcGjgQd8D0cXLjk
|
|
||||||
OZSmEnk4FCvV8ZdysjirqmuitFTE+PYmOJzhlQl8lubEs4Kc7L9CfEwbK9mNN0ZG
|
|
||||||
BNdT21nFuJp7YoZzZDTHuwF0nBjQFYcdaWDW+qFqrqs9mKbmCQ5vSzql6al+pzdX
|
|
||||||
X/YS0QTO0QKBgDUMprHQdUPLByJnnb1gxTqsOa2q3/ldc3eNJXJqWAfi2fjUh8HT
|
|
||||||
k+KxPW9qyqAy1832429FMSQW55ajSn+J6moMfFiGn3ozI8fp9QTGXD5+zJmK/X1N
|
|
||||||
WzEgSyBc9ffago0hFBLQBkDBkdtur7gwfS3qTYgrBhcwfTuFdXAM/FJJAoGABIQ2
|
|
||||||
OXel1waI2mcuDJLjuajXQN6gA6ONU3Y0L6+Vu6f+tyuA2SX+sNqT2Qgp7tzKBUOJ
|
|
||||||
R8RQK7bYDhk8iYr+7Zmt36lpk9Udp3eWD+4mzUHePMhsyJe51pttjj9g63hmDh8L
|
|
||||||
laIYDSCH+n7YgUiSeYxtKtnDWg6Lv0sEwKJ5nOECgYBsF5PoHRE4Q/Vs18qbI4t/
|
|
||||||
zPwWWNP0sb3PYRlWLTKMBowQdDOxnXAF12txoLNhpOn9DjZdNEb2EMsqlzdNjphN
|
|
||||||
uUWZq89d5kDwKfj4ji087elcjsW79R5oqwrN8a0NimftZ4eBPbcn8Y0r5psPcSzE
|
|
||||||
36iKGM2euQYD8Ub+aDOSLQ==
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
@@ -12,7 +12,6 @@ import org.springframework.scheduling.annotation.Async;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Propagation;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import ru.serega6531.packmate.properties.PackmateProperties;
|
|
||||||
import ru.serega6531.packmate.model.CtfService;
|
import ru.serega6531.packmate.model.CtfService;
|
||||||
import ru.serega6531.packmate.model.FoundPattern;
|
import ru.serega6531.packmate.model.FoundPattern;
|
||||||
import ru.serega6531.packmate.model.Packet;
|
import ru.serega6531.packmate.model.Packet;
|
||||||
@@ -26,8 +25,8 @@ import ru.serega6531.packmate.model.pojo.StreamDto;
|
|||||||
import ru.serega6531.packmate.model.pojo.StreamPagination;
|
import ru.serega6531.packmate.model.pojo.StreamPagination;
|
||||||
import ru.serega6531.packmate.model.pojo.SubscriptionMessage;
|
import ru.serega6531.packmate.model.pojo.SubscriptionMessage;
|
||||||
import ru.serega6531.packmate.model.pojo.UnfinishedStream;
|
import ru.serega6531.packmate.model.pojo.UnfinishedStream;
|
||||||
|
import ru.serega6531.packmate.properties.PackmateProperties;
|
||||||
import ru.serega6531.packmate.repository.StreamRepository;
|
import ru.serega6531.packmate.repository.StreamRepository;
|
||||||
import ru.serega6531.packmate.service.optimization.RsaKeysHolder;
|
|
||||||
import ru.serega6531.packmate.service.optimization.StreamOptimizer;
|
import ru.serega6531.packmate.service.optimization.StreamOptimizer;
|
||||||
|
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
@@ -46,7 +45,6 @@ public class StreamService {
|
|||||||
private final ServicesService servicesService;
|
private final ServicesService servicesService;
|
||||||
private final CountingService countingService;
|
private final CountingService countingService;
|
||||||
private final SubscriptionService subscriptionService;
|
private final SubscriptionService subscriptionService;
|
||||||
private final RsaKeysHolder keysHolder;
|
|
||||||
private final ModelMapper modelMapper;
|
private final ModelMapper modelMapper;
|
||||||
private final boolean ignoreEmptyPackets;
|
private final boolean ignoreEmptyPackets;
|
||||||
|
|
||||||
@@ -58,7 +56,6 @@ public class StreamService {
|
|||||||
ServicesService servicesService,
|
ServicesService servicesService,
|
||||||
CountingService countingService,
|
CountingService countingService,
|
||||||
SubscriptionService subscriptionService,
|
SubscriptionService subscriptionService,
|
||||||
RsaKeysHolder keysHolder,
|
|
||||||
ModelMapper modelMapper,
|
ModelMapper modelMapper,
|
||||||
PackmateProperties properties) {
|
PackmateProperties properties) {
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
@@ -66,7 +63,6 @@ public class StreamService {
|
|||||||
this.servicesService = servicesService;
|
this.servicesService = servicesService;
|
||||||
this.countingService = countingService;
|
this.countingService = countingService;
|
||||||
this.subscriptionService = subscriptionService;
|
this.subscriptionService = subscriptionService;
|
||||||
this.keysHolder = keysHolder;
|
|
||||||
this.modelMapper = modelMapper;
|
this.modelMapper = modelMapper;
|
||||||
this.ignoreEmptyPackets = properties.ignoreEmptyPackets();
|
this.ignoreEmptyPackets = properties.ignoreEmptyPackets();
|
||||||
}
|
}
|
||||||
@@ -104,7 +100,7 @@ public class StreamService {
|
|||||||
int packetsSize = packets.stream().mapToInt(p -> p.getContent().length).sum();
|
int packetsSize = packets.stream().mapToInt(p -> p.getContent().length).sum();
|
||||||
int packetsCount = packets.size();
|
int packetsCount = packets.size();
|
||||||
|
|
||||||
List<Packet> optimizedPackets = new StreamOptimizer(keysHolder, service, packets).optimizeStream();
|
List<Packet> optimizedPackets = new StreamOptimizer(service, packets).optimizeStream();
|
||||||
|
|
||||||
if (isStreamIgnored(optimizedPackets, service)) {
|
if (isStreamIgnored(optimizedPackets, service)) {
|
||||||
log.debug("New stream is ignored");
|
log.debug("New stream is ignored");
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
package ru.serega6531.packmate.service.optimization;
|
|
||||||
|
|
||||||
import lombok.SneakyThrows;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
|
||||||
import org.springframework.context.event.EventListener;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.math.BigInteger;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.security.KeyFactory;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.security.interfaces.RSAPrivateKey;
|
|
||||||
import java.security.spec.InvalidKeySpecException;
|
|
||||||
import java.security.spec.PKCS8EncodedKeySpec;
|
|
||||||
import java.util.Base64;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@Slf4j
|
|
||||||
public class RsaKeysHolder {
|
|
||||||
|
|
||||||
// Key: N from RSA public key
|
|
||||||
private final Map<BigInteger, RSAPrivateKey> keys = new HashMap<>();
|
|
||||||
|
|
||||||
public RSAPrivateKey getKey(BigInteger modulus) {
|
|
||||||
return keys.get(modulus);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventListener(ApplicationReadyEvent.class)
|
|
||||||
public void afterStartup(ApplicationReadyEvent event) {
|
|
||||||
log.info("Loading RSA keys...");
|
|
||||||
File dir = new File("rsa_keys");
|
|
||||||
if (dir.exists() && dir.isDirectory()) {
|
|
||||||
for (File keyFile : Objects.requireNonNull(dir.listFiles())) {
|
|
||||||
addKey(keyFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SneakyThrows
|
|
||||||
public void addKey(File keyFile) {
|
|
||||||
if (!keyFile.exists()) {
|
|
||||||
throw new IllegalArgumentException("Key file does not exist");
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
RSAPrivateKey privateKey = loadFromFile(keyFile);
|
|
||||||
keys.put(privateKey.getModulus(), privateKey);
|
|
||||||
String n = privateKey.getModulus().toString();
|
|
||||||
log.info("Loaded RSA key with N={}...", n.substring(0, Math.min(n.length(), 8)));
|
|
||||||
} catch (IOException | InvalidKeySpecException e) {
|
|
||||||
log.error("Error loading rsa key", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private RSAPrivateKey loadFromFile(File keyFile) throws IOException, InvalidKeySpecException, NoSuchAlgorithmException {
|
|
||||||
String content = Files.readString(keyFile.toPath());
|
|
||||||
|
|
||||||
content = content.replaceAll("-----BEGIN (RSA )?PRIVATE KEY-----", "")
|
|
||||||
.replaceAll("-----END (RSA )?PRIVATE KEY-----", "")
|
|
||||||
.replace("\n", "");
|
|
||||||
|
|
||||||
byte[] keyBytes = Base64.getDecoder().decode(content);
|
|
||||||
|
|
||||||
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
|
|
||||||
KeyFactory kf = KeyFactory.getInstance("RSA");
|
|
||||||
return (RSAPrivateKey) kf.generatePrivate(spec);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -11,7 +11,6 @@ import java.util.List;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class StreamOptimizer {
|
public class StreamOptimizer {
|
||||||
|
|
||||||
private final RsaKeysHolder keysHolder;
|
|
||||||
private final CtfService service;
|
private final CtfService service;
|
||||||
private List<Packet> packets;
|
private List<Packet> packets;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user