diff --git a/MiniKms/logs/controller.log b/MiniKms/logs/controller.log index c08ccfc..8075324 100644 --- a/MiniKms/logs/controller.log +++ b/MiniKms/logs/controller.log @@ -20,3 +20,189 @@ 2025-10-01 09:10:05 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [9ddbfebf-0170-4483-a22c-7cf2851c74fe] RESPONSE POST /api/v1/test/add | Status=200 | Duration=388ms | Body={"id":1,"name":"testname"} 2025-10-01 09:10:10 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [a5ea9e10-5849-4b51-8f00-314520b739d8] REQUEST GET /api/v1/test/1 | Body= 2025-10-01 09:10:10 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [a5ea9e10-5849-4b51-8f00-314520b739d8] RESPONSE GET /api/v1/test/1 | Status=200 | Duration=79ms | Body={"id":1,"name":"testname"} +2025-10-01 17:50:12 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [16add79c-335f-4502-bae4-2aa6efe9b0f2] REQUEST POST /api/v1/auth | Body={"username":"manager","password":"manager"} +2025-10-01 17:50:12 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [16add79c-335f-4502-bae4-2aa6efe9b0f2] RESPONSE POST /api/v1/auth | Status=200 | Duration=1131ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzMzgxMiwiZXhwIjoxNzU5MzM3NDEyfQ.YpxoA1qSKsjSFhtCHa8gUUlYoRyotNYYW_yXRUCrncY"} +2025-10-01 17:50:32 [https-jsse-nio-8443-exec-2] INFO f.s.m.l.RequestResponseLoggingFilter - [a3d34076-de9b-43d6-b917-568ea70bcedc] REQUEST POST /api/v1/auth | Body={"username":"user","password":"user"} +2025-10-01 17:50:32 [https-jsse-nio-8443-exec-2] INFO f.s.m.l.RequestResponseLoggingFilter - [a3d34076-de9b-43d6-b917-568ea70bcedc] RESPONSE POST /api/v1/auth | Status=200 | Duration=460ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwidXNlcklkIjoyLCJyb2xlIjoiVVNFUiIsImlhdCI6MTc1OTMzMzgzMiwiZXhwIjoxNzU5MzM3NDMyfQ.zdMDUWItw49GLvtPG6fJcVUnsjqwH00kpcWETmttTYs"} +2025-10-01 17:50:37 [https-jsse-nio-8443-exec-5] INFO f.s.m.l.RequestResponseLoggingFilter - [3b634127-ff0d-46d4-8401-2543ffd13c04] REQUEST POST /api/v1/auth | Body={"username":"user","password":"user"} +2025-10-01 17:50:37 [https-jsse-nio-8443-exec-5] INFO f.s.m.l.RequestResponseLoggingFilter - [3b634127-ff0d-46d4-8401-2543ffd13c04] RESPONSE POST /api/v1/auth | Status=200 | Duration=454ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwidXNlcklkIjoyLCJyb2xlIjoiVVNFUiIsImlhdCI6MTc1OTMzMzgzNywiZXhwIjoxNzU5MzM3NDM3fQ.CG2G6Wl__BTQ6Hproij4NT3El884Rmxc-T12yx3vTLM"} +2025-10-01 18:34:06 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [3ff10568-bd2a-46c9-8314-3c35811855c0] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:34:06 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [3ff10568-bd2a-46c9-8314-3c35811855c0] RESPONSE POST /api/v1/auth | Status=200 | Duration=1329ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNjQ0NiwiZXhwIjoxNzU5MzQwMDQ2fQ.eZCaYzE8oRp6utcGRlDdUQaMLISfw6YquXIjSx6xHZ8"} +2025-10-01 18:34:20 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [c98a1a98-bc73-46ab-b73a-060cf1ed1720] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:34:20 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [c98a1a98-bc73-46ab-b73a-060cf1ed1720] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=1835ms | Body={"id":"7479700a-8aac-4be1-9062-e0e3bf929b65","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:34:18.517835700Z","rotatedAt":null} +2025-10-01 18:35:18 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [5fd85c08-8781-4ed5-a282-d2eec05c899d] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "7479700a-8aac-4be1-9062-e0e3bf929b65" +} +2025-10-01 18:35:18 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [5fd85c08-8781-4ed5-a282-d2eec05c899d] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=20085ms | Body={"id":"7479700a-8aac-4be1-9062-e0e3bf929b65","alias":"My new example key","primaryVersion":2,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:34:18.517836Z","rotatedAt":"2025-10-01T16:35:18.445002Z"} +2025-10-01 18:35:30 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [6af00888-e9bb-4f1c-9225-ead14f12037e] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "7479700a-8aac-4be1-9062-e0e3bf929b65" +} +2025-10-01 18:35:30 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [6af00888-e9bb-4f1c-9225-ead14f12037e] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=5529ms | Body={"id":"7479700a-8aac-4be1-9062-e0e3bf929b65","alias":"My new example key","primaryVersion":3,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:34:18.517836Z","rotatedAt":"2025-10-01T16:35:30.142766700Z"} +2025-10-01 18:35:42 [https-jsse-nio-8443-exec-1] INFO f.s.m.l.RequestResponseLoggingFilter - [38e588ab-bdb2-448f-bc0b-7ac16078a2b7] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "7479700a-8aac-4be1-9062-e0e3bf929b65" +} +2025-10-01 18:35:42 [https-jsse-nio-8443-exec-1] INFO f.s.m.l.RequestResponseLoggingFilter - [38e588ab-bdb2-448f-bc0b-7ac16078a2b7] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=2496ms | Body={"id":"7479700a-8aac-4be1-9062-e0e3bf929b65","alias":"My new example key","primaryVersion":4,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:34:18.517836Z","rotatedAt":"2025-10-01T16:35:42.139067200Z"} +2025-10-01 18:37:21 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [24a30412-9001-4270-8bbb-18ebbfad3305] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "7479700a-8aac-4be1-9062-e0e3bf929b65" +} +2025-10-01 18:37:21 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [24a30412-9001-4270-8bbb-18ebbfad3305] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=400 | Duration=27ms | Body=Key with given id and version does not exist +2025-10-01 18:37:34 [https-jsse-nio-8443-exec-4] INFO f.s.m.l.RequestResponseLoggingFilter - [7a890838-c39f-4818-bc11-f28e2fe17485] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "7479700a-8aac-4be1-9062-e0e3bf929b65" +} +2025-10-01 18:37:34 [https-jsse-nio-8443-exec-4] INFO f.s.m.l.RequestResponseLoggingFilter - [7a890838-c39f-4818-bc11-f28e2fe17485] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=400 | Duration=10ms | Body=Key with given id and version does not exist +2025-10-01 18:40:07 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [27432aff-e9d5-4d13-82be-5fba15828911] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:40:07 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [27432aff-e9d5-4d13-82be-5fba15828911] RESPONSE POST /api/v1/auth | Status=200 | Duration=1315ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNjgwNywiZXhwIjoxNzU5MzQwNDA3fQ.tMBSKBAiJs3YfsAx0scvncw_8vsDpJ3veDEnTklzhNY"} +2025-10-01 18:40:25 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [c3684eac-71dd-44aa-bff0-0a7c4c262c39] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:40:25 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [c3684eac-71dd-44aa-bff0-0a7c4c262c39] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=4506ms | Body={"id":"3ef0f6fe-3321-4281-ac92-7f494ca63851","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:40:20.905752200Z","rotatedAt":null} +2025-10-01 18:40:41 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [5703c94b-a853-4785-983e-d3d8551a71ab] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "3ef0f6fe-3321-4281-ac92-7f494ca63851" +} +2025-10-01 18:40:41 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [5703c94b-a853-4785-983e-d3d8551a71ab] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=4429ms | Body={"id":"3ef0f6fe-3321-4281-ac92-7f494ca63851","alias":"My new example key","primaryVersion":2,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:40:20.905752Z","rotatedAt":"2025-10-01T16:40:41.875044300Z"} +2025-10-01 18:40:49 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [5090d52e-c030-48de-96ad-6c76ca63296d] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "3ef0f6fe-3321-4281-ac92-7f494ca63851" +} +2025-10-01 18:40:49 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [5090d52e-c030-48de-96ad-6c76ca63296d] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=5295ms | Body={"id":"3ef0f6fe-3321-4281-ac92-7f494ca63851","alias":"My new example key","primaryVersion":3,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:40:20.905752Z","rotatedAt":"2025-10-01T16:40:49.255775800Z"} +2025-10-01 18:40:54 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [0c83a016-ee7d-4914-8cb5-5f1e4ac71cde] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "3ef0f6fe-3321-4281-ac92-7f494ca63851" +} +2025-10-01 18:40:54 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [0c83a016-ee7d-4914-8cb5-5f1e4ac71cde] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=3515ms | Body={"id":"3ef0f6fe-3321-4281-ac92-7f494ca63851","alias":"My new example key","primaryVersion":4,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:40:20.905752Z","rotatedAt":"2025-10-01T16:40:54.251256800Z"} +2025-10-01 18:41:58 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [157057aa-cd5e-4759-902d-65376b1cd32b] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:41:58 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [157057aa-cd5e-4759-902d-65376b1cd32b] RESPONSE POST /api/v1/auth | Status=200 | Duration=1147ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNjkxOCwiZXhwIjoxNzU5MzQwNTE4fQ.hCP8CuVeKvndKtZtkBEKkirSPheWXZYcJ9G5nD8ALqA"} +2025-10-01 18:42:55 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [ddff333f-607e-4498-ad03-d4dbdca3d947] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:42:55 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [ddff333f-607e-4498-ad03-d4dbdca3d947] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=45173ms | Body={"id":"be653188-079d-4483-a4ff-ff5c779bb585","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:42:10.488367200Z","rotatedAt":null} +2025-10-01 18:44:06 [https-jsse-nio-8443-exec-5] INFO f.s.m.l.RequestResponseLoggingFilter - [d75b6eca-967f-4648-989a-c74ad3c0e58d] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:44:06 [https-jsse-nio-8443-exec-5] INFO f.s.m.l.RequestResponseLoggingFilter - [d75b6eca-967f-4648-989a-c74ad3c0e58d] RESPONSE POST /api/v1/auth | Status=200 | Duration=1175ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNzA0NiwiZXhwIjoxNzU5MzQwNjQ2fQ.zvLWwqq9_5eHwPXu7JzQAyLU4yXx8hHmZifoN0Z8ADM"} +2025-10-01 18:44:26 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [a195406c-839d-4b27-86a7-cfdca8162b4a] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:44:26 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [a195406c-839d-4b27-86a7-cfdca8162b4a] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=10801ms | Body={"id":"fcdcd18f-aabd-41be-8157-8851113978d6","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:44:16.051864900Z","rotatedAt":null} +2025-10-01 18:46:10 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [992aee7e-01f8-41a0-b1b4-be3c40ffd860] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:46:10 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [992aee7e-01f8-41a0-b1b4-be3c40ffd860] RESPONSE POST /api/v1/auth | Status=200 | Duration=1247ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNzE2OSwiZXhwIjoxNzU5MzQwNzY5fQ.HYjw5pQrvq838CabPspHmmFJdqFYJSntH6FI45moJOw"} +2025-10-01 18:46:36 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [2fb423b8-df93-48ff-a061-46bf89ab1e7b] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:46:36 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [2fb423b8-df93-48ff-a061-46bf89ab1e7b] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=5448ms | Body={"id":"f57049dd-7171-4896-8674-7070e22f32fd","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:46:31.039753400Z","rotatedAt":null} +2025-10-01 18:47:08 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [337e770b-1572-45d2-be01-329f7ceada13] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "f57049dd-7171-4896-8674-7070e22f32fd" +} +2025-10-01 18:47:08 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [337e770b-1572-45d2-be01-329f7ceada13] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=7838ms | Body={"id":"f57049dd-7171-4896-8674-7070e22f32fd","alias":"My new example key","primaryVersion":2,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:46:31.039753Z","rotatedAt":"2025-10-01T16:47:00.873628300Z"} +2025-10-01 18:47:16 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [b729dae8-12dc-4dbd-8ce5-7bd20682123b] REQUEST POST /api/v1/keys/rotate | Body={ + "id": "f57049dd-7171-4896-8674-7070e22f32fd" +} +2025-10-01 18:47:16 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [b729dae8-12dc-4dbd-8ce5-7bd20682123b] RESPONSE POST /api/v1/keys/rotate | Status=201 | Duration=6358ms | Body={"id":"f57049dd-7171-4896-8674-7070e22f32fd","alias":"My new example key","primaryVersion":3,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:46:31.039753Z","rotatedAt":"2025-10-01T16:47:10.103226900Z"} +2025-10-01 18:47:25 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [93e21bfc-f6de-4e96-a986-e9c00177876a] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "f57049dd-7171-4896-8674-7070e22f32fd" +} +2025-10-01 18:47:25 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [93e21bfc-f6de-4e96-a986-e9c00177876a] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=200 | Duration=45ms | Body= +2025-10-01 18:50:25 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [17be1baf-c1ad-4421-b10f-c41f49c43457] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:50:25 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [17be1baf-c1ad-4421-b10f-c41f49c43457] RESPONSE POST /api/v1/auth | Status=200 | Duration=1231ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNzQyNSwiZXhwIjoxNzU5MzQxMDI1fQ.yTW8_ImIhKWIjTGVKXLNl_-DV6Doknx7YEPzPLvecUo"} +2025-10-01 18:50:41 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [34f1a40c-2e06-47fe-a453-29da2f9d2f45] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:50:41 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [34f1a40c-2e06-47fe-a453-29da2f9d2f45] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=5380ms | Body={"id":"39a8a3ef-f6ce-43b1-941b-b06a2c33a888","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:50:35.717332Z","rotatedAt":null} +2025-10-01 18:51:12 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [565615ab-7fad-42d9-b6e8-b2d2d24a6395] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "39a8a3ef-f6ce-43b1-941b-b06a2c33a888" +} +2025-10-01 18:51:12 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [565615ab-7fad-42d9-b6e8-b2d2d24a6395] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=200 | Duration=24378ms | Body= +2025-10-01 18:52:33 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [4ba38d0c-dd9e-4950-a59b-115bfa41a043] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:52:33 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [4ba38d0c-dd9e-4950-a59b-115bfa41a043] RESPONSE POST /api/v1/auth | Status=200 | Duration=1262ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNzU1MywiZXhwIjoxNzU5MzQxMTUzfQ.SrUDoxodefcl6ZAGXrlCIH8AjiUh21P-4U6XLRyFgzs"} +2025-10-01 18:52:49 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [1d561aae-dc08-4bf5-b3b2-a17cf4d1109e] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:52:49 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [1d561aae-dc08-4bf5-b3b2-a17cf4d1109e] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=6172ms | Body={"id":"ff63888b-12cb-47db-b117-6ef4bb7cef59","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:52:43.307024700Z","rotatedAt":null} +2025-10-01 18:55:09 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [4da354e2-5083-47da-a7c8-45cc5dc62532] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "ff63888b-12cb-47db-b117-6ef4bb7cef59" +} +2025-10-01 18:55:09 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [4da354e2-5083-47da-a7c8-45cc5dc62532] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=200 | Duration=131364ms | Body= +2025-10-01 18:55:31 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [d7f720c9-16ce-4539-a94a-b7700bd14d70] REQUEST POST /api/v1/auth | Body={ + "username": "manager", + "password": "manager" +} +2025-10-01 18:55:31 [https-jsse-nio-8443-exec-6] INFO f.s.m.l.RequestResponseLoggingFilter - [d7f720c9-16ce-4539-a94a-b7700bd14d70] RESPONSE POST /api/v1/auth | Status=200 | Duration=1397ms | Body={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYW5hZ2VyIiwidXNlcklkIjoxLCJyb2xlIjoiTUFOQUdFUiIsImlhdCI6MTc1OTMzNzczMCwiZXhwIjoxNzU5MzQxMzMwfQ.2PKMtFGm-UdVXpFcTXE0YzbJ-dxEaZiwFs5TF1E2-Mc"} +2025-10-01 18:55:46 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [11d24ed2-2a78-446f-adf1-3fa460bdfb8c] REQUEST POST /api/v1/keys/create | Body={ + "alias": "My new example key", + "keyType": "asymmetric", + "allowedOperations": ["sign"] +} +2025-10-01 18:55:46 [https-jsse-nio-8443-exec-7] INFO f.s.m.l.RequestResponseLoggingFilter - [11d24ed2-2a78-446f-adf1-3fa460bdfb8c] RESPONSE POST /api/v1/keys/create | Status=201 | Duration=5928ms | Body={"id":"d77e27b7-f211-4ed5-bd76-fd016130fa6b","alias":"My new example key","primaryVersion":1,"keyType":"ASYMMETRIC","allowedOperations":["SIGN"],"createdAt":"2025-10-01T16:55:40.831513100Z","rotatedAt":null} +2025-10-01 18:55:52 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [51ab6e4b-3add-4a1c-986b-b63ea6bb3fd7] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:55:52 [https-jsse-nio-8443-exec-8] INFO f.s.m.l.RequestResponseLoggingFilter - [51ab6e4b-3add-4a1c-986b-b63ea6bb3fd7] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=57ms | Body=Hds8ayPC1qw/Ku6YS8gEJKlIZuFQuiwfemWWgpE9iH23mMMr/byX3dMK2eqg+UK/99OQ+Olfu1wDdBaFH4Xw9YIAd2HXB9BEn2DsliwXXUsvQNU/EHZEW4OOnj+XT8sFWDr4WFWHUFcVAOiQzmzZ3qmHAPp0l7qeQUKAJfqb5KNfi4K4Z/ABssT0QCtYcnrF5pWgNatG4qXEMEVuBAdooPu1+QmdiB4s4i3i9ldhip2os6UBl5Cxtc4pFecmW6buvN9+nJQfi0ZRT+nC6KVleEvqvW6kob2CAJUcm5mUb9lgJhAvtWeG0byNiaMD7aEiyl7C6fKd/292ypdZUk0ARhnpmIBSuqWE6V5NCHQiSQyDgAAqtdLpV+6hhxMsegI6HbLE9qpG7Ok6N0tIJTJOpZko22Hha5h1JN2RvefzjlXusPj6osfTNHn1v2XCCXMghI0s/7LdLmz1QKQYT49i3dXEzM/FJQd38exqmoUv5D7x033w9wKKO281AxO6DNL0 +2025-10-01 18:55:56 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [4c51ab3d-4345-42a6-be51-6a524e8d09a1] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:55:56 [https-jsse-nio-8443-exec-9] INFO f.s.m.l.RequestResponseLoggingFilter - [4c51ab3d-4345-42a6-be51-6a524e8d09a1] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=31ms | Body=R1HlSSg3OG7Rgb7gw/20JPwv0wNOGcSKwM53GLiFup3JdyR3Eq34v1xE26C/A994+NZxiK/gTiB13epE1XArAQxYGfkrFPweke2+XFNM5m+2NkKFKcoy7JHviSi95hhhsWM0iYBWpMloGQzUPklP5NiHdy/Y7g1LBkthz7dX6Mf01nxrlDuPnaPbD7mRKRTjUa73IfQ+NieUX6oosdIyaB2vOIePGeZrEDqugJRfV/XgTe/g4TIYhnFPFygMWpixWpOWONbhxttV4gxojUVWmPDyHOJ/VsYdvqsr6K6nkLC3Ct36QP8EmHwwRnWxXTyTh0XcoAXP26uttBSWWplI0L4/AxZqOEUvSfTU8tF5qXZ5eV7BoAyPJYb9ZRle+HxY0CZzI9WxTVcO7sFWBLnoRZ9J/NZ4AmZf5j4JRM0WKk24YgKWZB4U0EwntarI2zpR49WsYfWvz7+V3kPQEmfCkyz7Xw9CCGGml3IxiY2JqqQAWAVtAffmnxbWmJ/ua6p6 +2025-10-01 18:55:57 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [1eaa3759-ee63-4a76-9189-bc9db0e8ed08] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:55:57 [https-jsse-nio-8443-exec-10] INFO f.s.m.l.RequestResponseLoggingFilter - [1eaa3759-ee63-4a76-9189-bc9db0e8ed08] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=31ms | Body=ed2ZvAcXg35RaAy5vrDfYow2cdBTBJiqKEWe9Y/ytiDfx/Boi6s6yqAmNt43PmOwN/ODM5PC6JBBf17YQFMi6iCybyzdt/fDPFZWRGpdBGC2vMdIbd8A8Qzu82lLtJS1s1zkyS+gnAD1b/jJbs+gIg8vb9wn8Ule8EMo1LVw8tNmFVmrT+3n1SNCZ5dTnDt7wGF97c91Q/tSLLHc3wUnsHlmcsUHYhSUB4s+VhCmp2rBEUcZSNCaCyHLUUeUPLXihn0FjqXRVhffLxWuMdtMFZfbZlhBUwEkurHvXgNERfQHjMuRijgE8uWQuSX3fIWp1eFzxwc5Trf234MEGSPW++SewL3w6H96k+Nk7c8BrvAmt8PAudZoXf/X1+PFMffljgUdWvfY3UQ2j7wTfjTXOyHsaYzonUnld9hEpAw4xutxk7hTwd1HpTso4/LFYXiYMJ+4GP9TKL+1kOkD/9TYoC7sMk54f1S6WXScoGqD0UahbaHBLOHwE09lHqU9WdRy +2025-10-01 18:55:58 [https-jsse-nio-8443-exec-1] INFO f.s.m.l.RequestResponseLoggingFilter - [82058bf6-2c2c-4246-a21b-78d8fd85b2de] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:55:58 [https-jsse-nio-8443-exec-1] INFO f.s.m.l.RequestResponseLoggingFilter - [82058bf6-2c2c-4246-a21b-78d8fd85b2de] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=31ms | Body=RY3Op4hgHGlgRwp62afC/CcAFULrtAJdUPjb6637Qc89IMeeqVZ0tm+fo6WlU/sNxtbBfjC+ESJFBDFX137Koqm8kTF8tAm8s5USK7VvWrHilbHi8QOSFFDrFsoR56mF4ycP+rejmkHiGV0PTAZx/LSV/zPbr2JVop9z6BvbjMErKUEHiaVpoEkNmb7eGchNl4E1w885zKrlmv+A1uu4VDOpgQ9pbI27wpqwAKotZLBqcyfYa44MUnUi8CD6sXDKvptBhVGGm+QEInUJXzFMOirPI/C55t71+LBX2LSBNFo7lQd6ntYqm8l7MaEQ7zK4iw3KKrPasrfqJcJv0P/mg5mfn1d53oNrizmuDgtmZOokXn0t2YYb/goFA83eq6G7ojW86qwzq/UsUynSVSxYM1rqSe/xPXia7+NiLAmUbs80z7zvxeka8cs+6sx0SAymBzohcwcpVkQvumh28OevU4TIYH7tjxYO/J2T5tLy4WbAd1oNZqFclf0GLGhzeaWN +2025-10-01 18:56:00 [https-jsse-nio-8443-exec-2] INFO f.s.m.l.RequestResponseLoggingFilter - [0d8193ca-98ac-4533-affe-96eb0b379df3] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:56:00 [https-jsse-nio-8443-exec-2] INFO f.s.m.l.RequestResponseLoggingFilter - [0d8193ca-98ac-4533-affe-96eb0b379df3] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=32ms | Body=LXyKLSJ6g45ApA/dUNvr1FBpKxqSaK1vRLONmoacnZreBRfPD/TV5/Hec/OvOExUHVBtkjLj026y9bVcAU6NtIayNMM7YgOA+SmBRVFUTOHdt38e3JBZBAUlOEqD6r3/eA/wpsbbW9peU8s8asXrnu4NkWCywwSD0PcQWqgbBbp/4e+c1VXyojBr8pVPFpZSpU53dJarOR3Q7Imo5GYl8R/x2YchfOugLTkEZ7+7kSH3jeWCfEsRZ8rYAdst1J5xFKfSOz7ndAAHLl3x4ynblfy9HeU5NBIL4PQw4vxGugxIrjj4KLnbZeBRGXElv0A5G3ubHPhqDm6a5rZp3qH6wRmnh0tonwdCqC/FWP39H3616Vbq/ygxS2Xx/urSQcXxOBqzjVW7NwDGeMQalMBCvv3ObCIwrHXAn3A/BwMG3ePriv2+FoT/oXojOykz3V2z3oAulcU2N3CIoiRBHVMRMxudqwidhF0jzkKzWVLnDk6nSBYpb0ZNjTALp2ZHWtvb +2025-10-01 18:56:01 [https-jsse-nio-8443-exec-3] INFO f.s.m.l.RequestResponseLoggingFilter - [b99ee8ea-9d44-4745-b501-3bf09130c16f] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:56:01 [https-jsse-nio-8443-exec-3] INFO f.s.m.l.RequestResponseLoggingFilter - [b99ee8ea-9d44-4745-b501-3bf09130c16f] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=26ms | Body=aW7fX+DJt1+dMn+yZvZjvodQPAMR2QjwDSD/sU1wzuPfRygvngHubsQyF0bwZqbUiblJkiKfpo7mWwba8gHreJAy8PS389J9UyyJzypgZWVGZkJWVyzzOCtK1RrNOuFNxMPPk8NdZMh1BAvt5YGQvGPkaT6VDAyUbpkEl7Rr2q/z4P8s5mkvPhLeC9/BjNNOx19BpUrlVKj4rPQueqhWrdAMuvTSKg2gGnTvxgn78HGcEbSJvDLWN1Hs/27AicoShzwNGHj748eh5OK9jQ4MNggOvrw2qFp47rrA2y84aYuRVCS9sreC397Ky/IqYruhryv2ywJfSDuYNvKSjT7iKvh4WuU3RTaJUd+Ve6+eNeY/4Af77ZV3D1urHBeCi07ko1nGpWXm6OpVIPHRwJzKnw1jLcVvuzOO+g/5ILXs2u/IbO+ADUSPoNJrfgGMiP4Zvg6uWjNu5GCxc0rtH6/FzzSgZhmjMdHWsHHkO4l8Qb+rAXykwfjfhBGyAfqqUYyX +2025-10-01 18:56:03 [https-jsse-nio-8443-exec-4] INFO f.s.m.l.RequestResponseLoggingFilter - [ffe3e0a2-e1a2-4bd9-95cd-37b2b6be80e0] REQUEST POST /api/v1/crypto/encrypt/asymmetric | Body={ + "message": "This is my message woohooo", + "keyId": "d77e27b7-f211-4ed5-bd76-fd016130fa6b" +} +2025-10-01 18:56:03 [https-jsse-nio-8443-exec-4] INFO f.s.m.l.RequestResponseLoggingFilter - [ffe3e0a2-e1a2-4bd9-95cd-37b2b6be80e0] RESPONSE POST /api/v1/crypto/encrypt/asymmetric | Status=201 | Duration=25ms | Body=VLsdLnsd9DpRkaFLBCqgp4WHHU3y1/AhPAT7nPXeCZn+9NsbSXIUIhCU3j1fqtip/WINJW0lwoYX59xNYoFY0RUsWw1wffLoCEmb6CDtReRRCrPUNQZQm8dAHx4a8zlrO/94SMEHSEP+tsYhnPZnyqxXIKA91f40ZuS7kyqWEutxZhWB4rFtvNuBA8CUBsMPfmAjSRlvAmPHoHGfu62ALrv4nOb38W91nAOF1ufpx8yTF8KMwf2DqyxW1ILu23/uKXt3xLYg9VV29lN10WSV3PN8f/UrdDaKFF02bGoB6IhRIGCv1YL3mLx3tNYnhRFXHpeHzlkRWf+nVZE53XOYXC0kag0KjIX33VdxeLKX1i393VRLh11FqZosl3IZJ5hW0T+3qXk2mXBXetRHcM+2poyklIH4Nw+vVNCQaNoLqXWc6c59GZ55av5grl90Zw2J+VuzlUEVlOYyRDiivAk/GAi2iDcsJ8Bm0ImtuOxA2ckll9/qsLNEklVEurswDoYd diff --git a/MiniKms/src/main/java/ftn/security/minikms/controller/KeyComputeController.java b/MiniKms/src/main/java/ftn/security/minikms/controller/KeyComputeController.java index 6e9fd62..66c8cfa 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/controller/KeyComputeController.java +++ b/MiniKms/src/main/java/ftn/security/minikms/controller/KeyComputeController.java @@ -30,64 +30,63 @@ public ResponseEntity encryptSymmetric(@RequestBody CryptoDTO dto) throws Inv NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException { try { - String encrypted = service.encryptAes(dto.getMessage(), dto.getKeyId(), - dto.getUsername(), dto.getVersion()); + String encrypted = service.encryptAes(dto.getMessage(), dto.getKeyId(), dto.getVersion()); return ResponseEntity.status(HttpStatus.CREATED).body(encrypted); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); } } + @PostMapping("/decrypt/symmetric") public ResponseEntity decryptSymmetric(@RequestBody CryptoDTO dto) throws InvalidAlgorithmParameterException, NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException { try { - String decrypted = service.decryptAes(dto.getMessage(), dto.getKeyId(), - dto.getUsername(), dto.getVersion()); + String decrypted = service.decryptAes(dto.getMessage(), dto.getKeyId(), dto.getVersion()); return ResponseEntity.status(HttpStatus.CREATED).body(decrypted); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); } } + @PostMapping("/encrypt/asymmetric") public ResponseEntity encryptAsymmetric(@RequestBody CryptoDTO dto) throws NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException, InvalidKeySpecException { try { - String encrypted = service.encryptRsa(dto.getMessage(), dto.getKeyId(), - dto.getUsername(), dto.getVersion()); + String encrypted = service.encryptRsa(dto.getMessage(), dto.getKeyId(), dto.getVersion()); return ResponseEntity.status(HttpStatus.CREATED).body(encrypted); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); } } + @PostMapping("/decrypt/asymmetric") public ResponseEntity decryptAsymmetric(@RequestBody CryptoDTO dto) throws NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException, InvalidKeySpecException { try { - String decrypted = service.decryptRsa(dto.getMessage(), dto.getKeyId(), - dto.getUsername(), dto.getVersion()); + String decrypted = service.decryptRsa(dto.getMessage(), dto.getKeyId(), dto.getVersion()); return ResponseEntity.status(HttpStatus.CREATED).body(decrypted); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); } } + @PostMapping("/compute/hmac") public ResponseEntity computeHmac(@RequestBody CryptoDTO dto) throws Exception { try { - String computed = service.computeHmac(dto.getMessage(), dto.getKeyId(), - dto.getUsername(), dto.getVersion()); + String computed = service.computeHmac(dto.getMessage(), dto.getKeyId(), dto.getVersion()); return ResponseEntity.status(HttpStatus.CREATED).body(computed); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); } } + @PostMapping("/verify/hmac") public ResponseEntity verifyHmac(@RequestBody CryptoDTO dto) throws Exception { try { - Boolean verified = service.verifyHmac(dto.getMessage(), dto.getHmacBase64(), dto.getKeyId(), - dto.getUsername(), dto.getVersion()); + Boolean verified = service.verifyHmac(dto.getMessage(), dto.getHmacBase64(), dto.getKeyId(), dto.getVersion()); return ResponseEntity.status(HttpStatus.CREATED).body(verified); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); diff --git a/MiniKms/src/main/java/ftn/security/minikms/controller/KeyManagementController.java b/MiniKms/src/main/java/ftn/security/minikms/controller/KeyManagementController.java index 16ea510..5a765ae 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/controller/KeyManagementController.java +++ b/MiniKms/src/main/java/ftn/security/minikms/controller/KeyManagementController.java @@ -39,23 +39,35 @@ public ResponseEntity createKey(@RequestBody KeyDTO dto, Principal principal) } @PostMapping("/rotate") - public ResponseEntity rotateKey(@RequestBody KeyDTO dto, Principal principal) throws GeneralSecurityException { - var username = principal.getName(); - + public ResponseEntity rotateKey(@RequestBody KeyDTO dto) throws GeneralSecurityException { try { - var created = keyService.rotateKey(dto.getId(), username); + var created = keyService.rotateKey(dto.getId()); return ResponseEntity.status(HttpStatus.CREATED).body(mapper.toDto(created)); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); } } - @DeleteMapping("/{id}") - public ResponseEntity deleteKey(@PathVariable UUID id, Principal principal) { - var username = principal.getName(); + @GetMapping + public ResponseEntity getKeyMetadata() { + var keys = keyService.getAllKeys(); + return ResponseEntity.ok(keys.stream().map(mapper::toDto).toList()); + } + + @GetMapping("/{id}") + public ResponseEntity getKeyById(@PathVariable UUID id) { + try { + var key = keyService.getKeyById(id); + return ResponseEntity.ok(mapper.toDto(key)); + } catch (InvalidParameterException e) { + return ResponseEntity.badRequest().body(e.getMessage()); + } + } + @DeleteMapping("/{id}") + public ResponseEntity deleteKey(@PathVariable UUID id) { try { - keyService.deleteKey(id, username); + keyService.deleteKey(id); return ResponseEntity.noContent().build(); } catch (InvalidParameterException e) { return ResponseEntity.badRequest().body(e.getMessage()); diff --git a/MiniKms/src/main/java/ftn/security/minikms/dto/CryptoDTO.java b/MiniKms/src/main/java/ftn/security/minikms/dto/CryptoDTO.java index 800d361..f800b25 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/dto/CryptoDTO.java +++ b/MiniKms/src/main/java/ftn/security/minikms/dto/CryptoDTO.java @@ -10,7 +10,6 @@ public class CryptoDTO { private String message; private UUID keyId; - private String username; private Integer version; private String hmacBase64; } diff --git a/MiniKms/src/main/java/ftn/security/minikms/entity/KeyMetadata.java b/MiniKms/src/main/java/ftn/security/minikms/entity/KeyMetadata.java index 07cf9cd..a138c3d 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/entity/KeyMetadata.java +++ b/MiniKms/src/main/java/ftn/security/minikms/entity/KeyMetadata.java @@ -36,7 +36,7 @@ public class KeyMetadata { @ManyToOne @JoinColumn(name = "user_id", nullable = false) @OnDelete(action = OnDeleteAction.CASCADE) - private User user; + private User createdBy; private Instant createdAt; private Instant rotatedAt; @@ -50,7 +50,7 @@ public static KeyMetadata of(String alias, KeyType keyType, List a entity.primaryVersion = 0; entity.keyType = keyType; entity.allowedOperations = allowedOperations; - entity.user = user; + entity.createdBy = user; entity.createdAt = Instant.now(); return entity; } @@ -62,10 +62,4 @@ public void updatePrimaryVersion(Integer version) { rotatedAt = Instant.now(); } } - public WrappedKey getVersion(int version) { - return versions.stream() - .filter(wk -> wk.getVersion() == version) - .findFirst() - .orElse(null); - } } diff --git a/MiniKms/src/main/java/ftn/security/minikms/entity/WrappedKey.java b/MiniKms/src/main/java/ftn/security/minikms/entity/WrappedKey.java index 143c64e..695b199 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/entity/WrappedKey.java +++ b/MiniKms/src/main/java/ftn/security/minikms/entity/WrappedKey.java @@ -27,9 +27,9 @@ public class WrappedKey { @OnDelete(action = OnDeleteAction.CASCADE) private KeyMetadata metadata; - public static WrappedKey of(KeyMaterial wrappedMaterial, KeyMetadata metadata) { + public static WrappedKey of(Integer version, KeyMaterial wrappedMaterial, KeyMetadata metadata) { var entity = new WrappedKey(); - entity.version = 1; + entity.version = version; entity.wrappedMaterial = wrappedMaterial; entity.metadata = metadata; return entity; diff --git a/MiniKms/src/main/java/ftn/security/minikms/repository/KeyMetadataRepository.java b/MiniKms/src/main/java/ftn/security/minikms/repository/KeyMetadataRepository.java index da1e440..7966c5e 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/repository/KeyMetadataRepository.java +++ b/MiniKms/src/main/java/ftn/security/minikms/repository/KeyMetadataRepository.java @@ -3,10 +3,7 @@ import ftn.security.minikms.entity.KeyMetadata; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.Optional; import java.util.UUID; public interface KeyMetadataRepository extends JpaRepository { - boolean existsByIdAndUserUsername(UUID id, String username); - Optional findByIdAndUserUsername(UUID id, String username); } diff --git a/MiniKms/src/main/java/ftn/security/minikms/repository/WrappedKeyRepository.java b/MiniKms/src/main/java/ftn/security/minikms/repository/WrappedKeyRepository.java index 1ba4b75..57ea093 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/repository/WrappedKeyRepository.java +++ b/MiniKms/src/main/java/ftn/security/minikms/repository/WrappedKeyRepository.java @@ -3,5 +3,9 @@ import ftn.security.minikms.entity.WrappedKey; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; +import java.util.UUID; + public interface WrappedKeyRepository extends JpaRepository { + Optional findByMetadataIdAndVersion(UUID metadataId, Integer version); } diff --git a/MiniKms/src/main/java/ftn/security/minikms/service/KeyComputeService.java b/MiniKms/src/main/java/ftn/security/minikms/service/KeyComputeService.java index 18badfb..a62e654 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/service/KeyComputeService.java +++ b/MiniKms/src/main/java/ftn/security/minikms/service/KeyComputeService.java @@ -2,7 +2,9 @@ import ftn.security.minikms.entity.KeyMaterial; import ftn.security.minikms.repository.KeyMetadataRepository; +import ftn.security.minikms.repository.WrappedKeyRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; @@ -15,50 +17,63 @@ import java.util.UUID; @Service +@Transactional public class KeyComputeService { private final KeyMetadataRepository metadataRepository; + private final WrappedKeyRepository keyRepository; private final AESService aesService; private final RSAService rsaService; private final HMACService hmacService; - private static final String NOT_AUTHORIZED_MSG = "You do not own a key with given id"; - public KeyComputeService(KeyMetadataRepository metadataRepository) { + public KeyComputeService(KeyMetadataRepository metadataRepository, WrappedKeyRepository keyRepository) { this.metadataRepository = metadataRepository; + this.keyRepository = keyRepository; this.aesService = new AESService(); this.rsaService = new RSAService(); this.hmacService = new HMACService(); } - public String encryptAes(String message, UUID keyId, String username, Integer version) + + public String encryptAes(String message, UUID keyId, Integer version) throws InvalidAlgorithmParameterException, NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException { - return aesService.encrypt(message, getKey(keyId, username, version)); + return aesService.encrypt(message, getKey(keyId, version)); } - public String decryptAes(String message, UUID keyId, String username, Integer version) + + public String decryptAes(String message, UUID keyId, Integer version) throws InvalidAlgorithmParameterException, NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException { - return aesService.decrypt(message, getKey(keyId, username, version)); + return aesService.decrypt(message, getKey(keyId, version)); } - public String encryptRsa(String message, UUID keyId, String username, Integer version) + + public String encryptRsa(String message, UUID keyId, Integer version) throws IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException { - return rsaService.encrypt(message, getKey(keyId, username, version)); + return rsaService.encrypt(message, getKey(keyId, version)); } - public String decryptRsa(String message, UUID keyId, String username, Integer version) + + public String decryptRsa(String message, UUID keyId, Integer version) throws IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException { - return rsaService.decrypt(message, getKey(keyId, username, version)); + return rsaService.decrypt(message, getKey(keyId, version)); } - public String computeHmac(String message, UUID keyId, String username, Integer version) throws Exception { - return hmacService.computeHmac(message, getKey(keyId, username, version)); + + public String computeHmac(String message, UUID keyId, Integer version) throws Exception { + return hmacService.computeHmac(message, getKey(keyId, version)); } - public boolean verifyHmac(String message, String hmacBase64, UUID keyId, String username, Integer version) + + public boolean verifyHmac(String message, String hmacBase64, UUID keyId, Integer version) throws Exception { - return hmacService.verifyHmac(message,hmacBase64, getKey(keyId, username, version)); + return hmacService.verifyHmac(message,hmacBase64, getKey(keyId, version)); } - private KeyMaterial getKey(UUID keyId, String username, Integer version){ - var metadata = metadataRepository.findByIdAndUserUsername(keyId, username) - .orElseThrow(() -> new InvalidParameterException(NOT_AUTHORIZED_MSG)); - var wrappedKey = version != null? metadata.getVersion(version) : metadata.getVersion(metadata.getPrimaryVersion()); + + public KeyMaterial getKey(UUID keyId, Integer version) { + var metadata = metadataRepository.findById(keyId) + .orElseThrow(() -> new InvalidParameterException("Key with given id does not exist")); + + if (version == null) version = metadata.getPrimaryVersion(); + var wrappedKey = keyRepository.findByMetadataIdAndVersion(keyId, version) + .orElseThrow(() -> new InvalidParameterException("Key with given id and version does not exist")); + return wrappedKey.getWrappedMaterial(); } } diff --git a/MiniKms/src/main/java/ftn/security/minikms/service/KeyManagementService.java b/MiniKms/src/main/java/ftn/security/minikms/service/KeyManagementService.java index af1c37e..d657fe5 100644 --- a/MiniKms/src/main/java/ftn/security/minikms/service/KeyManagementService.java +++ b/MiniKms/src/main/java/ftn/security/minikms/service/KeyManagementService.java @@ -23,7 +23,7 @@ public class KeyManagementService { private final UserRepository userRepository; private final RootKeyManager rootKeyManager; private final Map cryptoServices; - private static final String NOT_AUTHORIZED_MSG = "You do not own a key with given id"; + private static final String KEY_NOT_FOUND = "Key with given id does not exist"; public KeyManagementService( KeyMetadataRepository metadataRepository, @@ -48,16 +48,13 @@ public KeyMetadata createKey(String alias, KeyType keyType, List a return createNewKeyVersion(metadata, 1); } - public void deleteKey(UUID id, String username) throws InvalidParameterException { - if (!metadataRepository.existsByIdAndUserUsername(id, username)) - throw new InvalidParameterException(NOT_AUTHORIZED_MSG); - + public void deleteKey(UUID id) throws InvalidParameterException { metadataRepository.deleteById(id); } - public KeyMetadata rotateKey(UUID id, String username) throws InvalidParameterException, GeneralSecurityException { - var metadata = metadataRepository.findByIdAndUserUsername(id, username) - .orElseThrow(() -> new InvalidParameterException(NOT_AUTHORIZED_MSG)); + public KeyMetadata rotateKey(UUID id) throws InvalidParameterException, GeneralSecurityException { + var metadata = metadataRepository.findById(id) + .orElseThrow(() -> new InvalidParameterException(KEY_NOT_FOUND)); var nextVersion = metadata.getPrimaryVersion() + 1; return createNewKeyVersion(metadata, nextVersion); @@ -66,6 +63,8 @@ public KeyMetadata rotateKey(UUID id, String username) throws InvalidParameterEx private KeyMetadata createNewKeyVersion(KeyMetadata metadata, Integer version) throws GeneralSecurityException { var id = metadata.getId(); var keyType = metadata.getKeyType(); + metadata.updatePrimaryVersion(version); // Set the latest version as primary + var saved = metadataRepository.save(metadata); var material = cryptoServices.get(keyType).generateKey(); var secretKey = material.getKey(); @@ -76,13 +75,21 @@ private KeyMetadata createNewKeyVersion(KeyMetadata metadata, Integer version) t material.setKey(wrapped); - var key = keyRepository.save(WrappedKey.of(material, metadata)); - metadata.updatePrimaryVersion(version); // Set the latest version as primary - return metadataRepository.save(metadata); + keyRepository.save(WrappedKey.of(version, material, saved)); + return saved; } private User findUserByUsername(String username) throws InvalidParameterException { return userRepository.findByUsername(username).orElseThrow(() -> new InvalidParameterException("User with given username does not exist")); } + + public List getAllKeys() { + return metadataRepository.findAll(); + } + + public KeyMetadata getKeyById(UUID id) { + return metadataRepository.findById(id).orElseThrow(() -> + new InvalidParameterException("Key with given id does not exist")); + } }